2017年12月7日

Linux 链接详解----动态链接库

摘要: 静态库的缺点: 动态库: 是一个目标文件,包含代码和数据,它可以在程序运行时动态的加载并链接。修改动态库不需要重新编译目标文件,只需要更新动态库即可。动态库还可以同时被多个进程使用。在linux下生成动态库 gcc -c a.c -fPIC -o a.o gcc -shared -fPIC a.o 阅读全文

posted @ 2017-12-07 16:38 沐浴凌风 阅读(9801) 评论(2) 推荐(2) 编辑

2017年12月5日

Libevent 事件循环(1)

摘要: 以 epoll 模型的dispatch 看一下evsel->dispatch(base, tv_p); 再看一下timeout_process. 阅读全文

posted @ 2017-12-05 17:04 沐浴凌风 阅读(1270) 评论(0) 推荐(0) 编辑

Linux 链接详解----静态链接实例分析

摘要: 由Linux链接详解(1)中我们简单的分析了静态库的引用解析和重定位的内容, 下面我们结合实例来看一下静态链接重定位过程。 实例中使用了如上代码, 在a.c 中是我们的入口函数main 和定义的全局变量a,其中引用了函数add 它的定义在b.c中。在b.c中又引用了a.c中a的定义。我们先将其分别编 阅读全文

posted @ 2017-12-05 13:02 沐浴凌风 阅读(578) 评论(0) 推荐(0) 编辑

2017年12月4日

Libevent 事件管理和添加事件

摘要: /** 我们先来看一下事件的创建*/struct event * event_new(struct event_base *base, evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *), void *arg) { struct event *ev; ev = mm_mall... 阅读全文

posted @ 2017-12-04 17:44 沐浴凌风 阅读(784) 评论(0) 推荐(0) 编辑

2017年11月17日

Linux 链接详解(2)

摘要: 可执行文件加载执行过程: 上一节我们说到ELF文件格式,静态库的符号解析和重定位的内容。这一节我们来分析一下可执行文件。 由上一节我们知道可执行文件也是ELF文件,当程序被加载器加载到内存时是按照ELF格式去解析,然后把可执行文件的不同节加载到虚拟地址空间中。我们看一下32位下的进程虚拟地址模型: 阅读全文

posted @ 2017-11-17 12:39 沐浴凌风 阅读(371) 评论(0) 推荐(0) 编辑

2017年11月16日

Linux 链接详解(1)

摘要: 可执行文件的生成过程: hello.c 预处理 > hello.i 编译 > hello.s 汇编 > hello.o 链接 >hello 加载 >hello进程 其中预处理器根据hello.c中的#开头的命令解析, 如将include 头文件放在此处,选择条件编译等等; 编译阶段 就是将.i 文件 阅读全文

posted @ 2017-11-16 14:43 沐浴凌风 阅读(1658) 评论(0) 推荐(0) 编辑

2017年11月9日

Libevent 反应堆的初始化

摘要: // 默认情况下new eventbase struct event_base * event_base_new(void) { struct event_base *base = NULL; //初始化系统配置 struct event_config *cfg = event_config_new(); // 使用默认的配置方法 if (cfg) { ... 阅读全文

posted @ 2017-11-09 16:38 沐浴凌风 阅读(385) 评论(0) 推荐(0) 编辑

Libevent(2.1.8)中的事件结构和管理

摘要: Libevent(2.1.8)中的事件结构体 这里的libevent版本为 2.1.8 。 libevent中事件的结构体struct event,定义在event_struct.h 中, 这里我们简单看一下: 这里可以看到这个版本下的event 结构体比之前的好像少了不少东西, 如之前的结构: 这 阅读全文

posted @ 2017-11-09 15:21 沐浴凌风 阅读(465) 评论(0) 推荐(0) 编辑

epoll 惊群处理

摘要: 1 #include <sys/types.h> 2 #include <sys/socket.h> 3 #include <sys/epoll.h> 4 #include <netdb.h> 5 #include <string.h> 6 #include <stdio.h> 7 #include 阅读全文

posted @ 2017-11-09 13:13 沐浴凌风 阅读(716) 评论(0) 推荐(0) 编辑

2017年10月30日

gdb的多线程调试

摘要: info threads 可以查看当前进程有哪些线程 thread ID 可以切换到线程ID bt 查看当前线程堆栈 set scheduler-locking on多线程调试过程中, 线程会来回切换, 使用它即可锁定一个线程。 当程序被打断点时, 所有线程都会停下 如果不希望其他线程也停下, 可以 阅读全文

posted @ 2017-10-30 10:25 沐浴凌风 阅读(291) 评论(0) 推荐(1) 编辑

导航