Linux系统编程
文章平均质量分 72
木易muyi
无
展开
-
I/O多路转接
什么是I/O多路转接? 对大量的文件描述符进行I/O事件监控。 IO事件包括:可读事件、可写事件、异常事件 函数select int select( int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout ); 参数nfds:在下面3个文件描述符集中找到最大的文件描述符,然后+1。 参数readfds和writefds和exceptfds:描述符集的指针,可以将它看成是一个数组。这3原创 2022-05-20 17:46:28 · 2581 阅读 · 0 评论 -
getline
getline getline源码,根据源码编写自己的getline函数,只保留核心功能,。 #define GETDELIM_GROWBY 64 /** * @brief 读取一行数据 * * @param lineptr 数据存放缓冲区 * @param n lineptr的大小 * @param stream * @return ssize_t 成功返回读取到的数量,失败返回-1 */ ssize_t mygetline( char **lineptr, size_t *n, FIL原创 2022-05-01 21:01:14 · 649 阅读 · 0 评论 -
文件IO缓冲
文件I/O缓冲 系统I/O调用和C语言库I/O函数在操作磁盘文件时会对数据进行缓冲 介绍 read() 和 write() 调用在操作磁盘文件时不会直接发起磁盘访问,而是仅仅在用户空间缓冲区和内核缓冲区高速缓存之间复制数据。在后续某个时刻,内核会将其缓冲区的数据刷新到磁盘。当把缓冲区中的数据取完,这时内核会将文件的下一段内容读入缓冲区。 采用这一设计,使 read() 和 write() 调用的操作更为快捷。Linux 内核对缓冲区的大小没有固定上限。受限于: 物理内存总量 处于其他目的对物理内存的需求原创 2022-04-24 12:12:14 · 211 阅读 · 0 评论 -
Linux内存映射
内存映射 按文件分: 文件映射:将一个文件的一部分直接映射到调用进程的虚拟内存中 匿名映射:没有对应文件,被映射的分页会初始化为0 按权限分: 私有映射:写时复制,变更不会再底层文件进行 共享映射:变更发生在底层文件 将上面两两组合: 私有文件映射:使用一个文件的内容来初始化一块内存区域 私有匿名映射:为一个进程分配新的内存 共享文件映射:代替 read() 和 write() 、IPC 共享匿名映射:实现相关进程实现类似于共享内存 进程执行 exec() 时映射会丢失,但通过 fork()原创 2022-04-20 20:51:06 · 1608 阅读 · 0 评论 -
System V 共享内存
System V 共享内存 fork() 创建的子进程会继承其父进程附加的共享内存段 API 函数 创建或打开共享内存 #include <sys/types.h> #include <sys/shm.h> int shmget( key_t key, size_t, int shmflg ); 参数 key:由 IPC_PRIVATE 或 ftok() 生成的键 参数 size:表示需分配共享内存的字节数 内核是以系统分页大小的整数被来分配共享内存的,所以会 size 会被提原创 2022-04-19 10:03:57 · 147 阅读 · 0 评论 -
System V 信号量
System V 信号量 API 函数 创建或打开一个信号量集 #include <sys/types.h> #include <sys/sem.h> int semget( key_t key, int nsems, int semflg ); 成功返回信号集的标识符 参数 key:由 IPC_PRIVATE 或 ftok() 返回的键 参数 nsems: 创建信号集时:nsems 指定信号量的数量,必须大于0 获取信号集时:nsems 必须小于等于集合的大小 参数 s原创 2022-04-16 14:35:30 · 1126 阅读 · 0 评论 -
ELF目标文件分析
ELF目标文件分析 源代码 #include <stdio.h> int printf( const char* format, ... ); int global_init_var = 84; int global_unint_var; void func1( int i ) { printf( "%d\n", i ); } int main( void ) { static int static_var = 85; static int static_var2原创 2022-04-12 16:25:29 · 353 阅读 · 0 评论 -
System V 消息队列
消息队列 创建消息队列 #include <sys/types.h> #include <sys/msg.h> int msgget( key_t key, int msgflg ) 成功返回消息队列的标识符,它是消息队列的句柄。失败返回-1和设置error 参数 key 是一个键,用于生成唯一的标识符。可由 IPC_PRIVATE或 ftok() 生成。 参数 msgflg 是权限位和下面这些位组成: IPC_CREAT:没有于指定 key 对应的消息队列,则新建一个 I原创 2022-04-12 10:56:00 · 674 阅读 · 0 评论