恋恋风辰的个人博客


  • Home

  • Archives

  • Categories

  • Tags

  • Search

汇编语言学习笔记(一)

Posted on 2017-08-12 | In 汇编

一:变量类型

汇编语言变量基本类型如下:

sdword :表示32位整数

dword:表示32位无符号整数

sword:表示16位整数

word:表示16位无符号整数

sbyte:表示8位整数

byte:用于表示字节,大小为8位

变量的表示和定义:

C语言中

1
int num3 = 5;

汇编中

1
num3 sdword 5;

C语言中

1
2
3
char name1;

char name2=‘A’;

汇编中:

1
2
3
name1 byte ?

name2 byte ‘A’;

C语言中:

1
char name[] = "iloveu";

汇编中:

1
name byte ‘iloveu’,0 ;字符串结汇通常带有二进制的0,占用一个字节。
Read more »

win7 64位环境下配置汇编环境和程序设计

Posted on 2017-08-12 | In 汇编

下载dosbox,并解压安装

下载地址: http://pan.baidu.com/s/1eRJbJAq

默认安装到C:\Program Files (x86)\DOSBox-0.74

安装成功后,双击该目录下DOSBox 0.74 Options.bat文件,弹出配置选项文本文档,

找到[autoexec]选项,在下面添加如下字段:

1
2
MOUNT C D:\masmpro 
set PATH=$PATH$;D:\masmpro

D:\masmpro是我创建的汇编程序目录,这样每次启动dosbox,自动挂载到我自己的项目目录里。

当然也可以手动设置,启动dosbox,手动输入MOUNT C D:\masmpro 然后回车

效果如下:
1.png

Read more »

makefile学习笔记

Posted on 2017-08-12 | In Linux

之前都是手动编译的,最近也学了下makefile相关的知识,文件结构是这样的在server文件夹里有eventloop.h,eventloop.cpp, networking.h, networking.cpp,

api_epoll.h, api_epoll.cpp,以及文件夹main,在main文件夹里有一个main.cpp文件。

先写一个简单的makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
./server: eventloop.o api_epoll.o networking.o main.o
g++ -o ./server eventloop.o api_epoll.o networking.o main.o

main.o: ./main/main.cpp eventloop.h api_epoll.h networking.h
g++ -c ./main/main.cpp -o main.o

eventloop.o: eventloop.cpp eventloop.h api_epoll.h
g++ -c eventloop.cpp -o eventloop.o

api_epoll.o: api_epoll.cpp api_epoll.h eventloop.h
g++ -c api_epoll.cpp -o api_epoll.o

networking.o: networking.cpp networking.h eventloop.h
g++ -c networking.cpp -o networking.o

clean:
rm -f $(OBJS) $(TARGET)

makefile基本写法是

目标:依赖项

  command

Read more »

Linux环境编译动态库和静态库总结

Posted on 2017-08-08 | In Linux

对Linux环境动态库和静态库的一些基础知识做一些总结,

首先总结静态库的编译步骤。

1 先基于.cpp或者.c文件生成对应的.o文件

2将几个.o文件 使用ar -cr命令 生成libname.a文件

libname.a 为静态库, name 为静态库的名字,

可以根据模块功能命名。

举个例子

在当前目录下,有一个mymethod.h文件
1.png

Read more »

pthread_cond_wait学习笔记

Posted on 2017-08-08 | In 网络编程

近期学习了线程等待和激活的相关知识。

先介绍几个api:

pthread_cond_t表示多线程的条件变量,用于控制线程等待和就绪的条件。

一:条件变量的初始化:

条件变量和互斥锁一样,都有静态动态两种创建方式,

静态方式使用PTHREAD_COND_INITIALIZER常量初始化。

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

动态方式初始化:

1 首先要new或者malloc一个pthread_cond_t类型变量,

用完后记得delete或者free掉。

2动态方式

调用pthread_cond_init()函数,API定义如下:

int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);

Read more »

Linux环境崩溃生成core文件以及调试

Posted on 2017-08-07 | In Linux

Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是

需要更改Linux设置,使程序崩溃时候产生core文件。然后gdb调试即可。

1产生core文件方法

产生coredump的条件,首先需要确认当前会话的ulimit –c,若为0,则不会产生对应的coredump,需要进行修改和设置。

ulimit -c unlimited (可以产生coredump且不受大小限制),这种设置仅对当前生效,如果想永久生效

那么需要在

/etc/profile中加入以下一行,这将允许生成coredump文件

ulimit-c unlimited

Read more »

对于redis底层框架的理解(一)

Posted on 2017-08-07 | In 网络编程

近期学习了redis底层框架,好多东西之前都没听说过,算是大开眼界了。
先梳理下redis正常的通讯流程吧
首先服务器启动都有主函数main,这个main函数就在redis.c里

首先是initserverconfig(),在这里初始化了redisserver基本的配置信息,

接着调用loadServerConfig(char *filename) 对 server 全局变量重新初始化。

然后是调用daemonize(),实现守护进程,脱离了控制台,使这个进程成为独立的首领进程

接下来是initServer(),这个过程很重要,完成了事件驱动的注册和一些回调函数的绑定,回头仔细说这个函数里面的功能

初始化服务器过后aeSetBeforeSleepProc(),设置了服务器休眠之前会

调用beforeSleep函数,然后进入主要的事件轮询函数 aeMain(server.el),在这里完成事件的派发

最后事件轮询过后我们调用aeDeleteEventLoop,释放之前开辟的内存,

结束进程。

中间略去一些琐碎的过程,我们总结一下

initserverconfig() ----> loadServerConfig------> daemonize()------->

initServer()-----> aeSetBeforeSleepProc()------>aeMain()----->aeDeleteEventLoop

Read more »

IO多路复用之epoll(一)讲解

Posted on 2017-08-07 | In 网络编程

网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区,好比是一个水池,当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区,然后从

socket发送缓冲区发出去, 当用户要读取数据时,就是从socket内核读缓冲区读到用户缓冲区。所以TCP中recv, send, read, write等函数并不是真的直接读写

发送报文,而是将数据分别写到socket内核缓冲区,或者从socket内核缓冲区读到用户区。

对于读有两种状态,可读和不可读,当用户从socket中读取数据的时候,如果socket读缓冲区内容为空,那么读数据会失败,阻塞情况下会等待数据到来,非阻塞情况下

会返回一个EWOULDBLOCK 或者EAGAIN,反之如果读缓冲区内容不为空,那么就会返回读到的字节数。

对于用户向socket中写数据,存在可写和不可写,如果socket写缓冲区内容满了,此时向socket写缓冲区里写数据会失败,阻塞情况下会等待socket的写缓冲区非满(有空闲空间),非阻塞情况下回返回-1,根据errono 为EWOULDBLOCK或者EAGAIN,判断写缓冲区满

反之,如果socket写缓冲区此时非满,那么写会成功,返回写入的字节数。

综上所述,对于读的情况,我们关注socket读缓冲区空还是非空,对于写的情况,我们关注

Read more »

IO多路复用之epoll(二)

Posted on 2017-08-07 | In 网络编程

前一篇介绍了epoll的LT模式,LT模式注意epollout事件在数据全部写成功后需要取消关注,或者更改为EPOLLIN。

而这次epoll的ET模式,要注意的是在读和写的过程中要在循环中写完或者读完所有数据,确保不要丢掉一些数据。

因为epoll ET模式只在两种边缘更改的时候触发,对于读事件只在内核缓冲区由空变为

非空通知一次用户,对于写事件,内核缓冲区只在由满变为非满的情况通知用户一次。

Read more »

基于epoll封装的事件回调miniserver

Posted on 2017-08-07 | In 网络编程

epoll技术前两节已经阐述过了,目前主要做一下封装,很多epoll的服务器都是采用事件回调方式处理,

其实并没有什么复杂的,我慢慢给大家阐述下原理。

在networking.h和networking.cpp里,这两个文件主要实现了一些文件读写功能的回调函数

https://cdn.llfc.club/miniserver1.png

acceptCallBack 负责新的描述符连接上来进行回调,

readCallBack 负责读操作回调

Read more »
<1…323334…37>

370 posts
17 categories
21 tags
RSS
GitHub ZhiHu
© 2025 恋恋风辰 本站总访问量次 | 本站访客数人
Powered by Hexo
|
Theme — NexT.Muse v5.1.3