sync_file_range系统调用及示例

好的,我们来深入学习 sync_file_range 系统调用 1. 函数介绍 在 Linux 系统中,为了提高性能,当你调用 write() 将数据写入文件时,这些数据通常不会立即写入到物理磁盘上。相反,它们会被暂时存储在内核的页缓存 (Page Cache) 中。操作系统会在稍后的某个时间点(或者当缓存满时)自动将这些数据刷新到磁盘。这种机制大大提高了写入速度,但也带来了一个问题:如果在数据被实际写入磁盘之前系统崩溃或断电,那么这部分数据就会丢失。 fsync() 和 fdatasync() 函数可以强制将文件的所有(或部分)修改数据从内核缓存刷新到磁盘,确保数据的持久化。但是,它们通

Read More

syscall系统调用及示例

syscall函数详解 syscall函数是Linux系统中访问系统调用的通用接口,它是用户程序与Linux内核之间的重要桥梁。可以将syscall想象成一个”万能钥匙”,它允许程序直接调用内核提供的各种底层功能,如文件操作、进程控制、网络通信、内存管理等。 1. 函数介绍 syscall函数是Linux系统中访问系统调用的通用接口,它是用户程序与Linux内核之间的重要桥梁。可以将syscall想象成一个”万能钥匙”,它允许程序直接调用内核提供的各种底层功能,如文件操作、进程控制、网络通信、内存管理等。 在Linux系统中,所有的系统功能都是通过系统调用来实现的。当你调用像open(

Read More

create_module系统调用及示例

关于 create_module 和 delete_module 的内核版本历史 create_module 废弃时间 * Linux 2.6 内核(2003年左右)开始逐步废弃 * Linux 2.6.8 版本后完全移除 * 最后支持的内核版本:Linux 2.4.x delete_module 变化时间 * Linux 2.6 内核开始改变行为 * 从系统调用转变为更安全的模块管理机制 * 现代系统中仍然存在,但行为更加受限 详细历史说明 1 2 3 4 5 6 7 8 9 1

Read More

dup-dup2系统调用及示例

我们继续学习 Linux 系统编程中的重要函数。这次我们介绍 dup 和 dup2 函数,它们用于复制一个已存在的文件描述符 (file descriptor)。 1. 函数介绍 dup 和 dup2 是 Linux 系统调用,它们的功能是创建一个指向同一文件表项 (open file description) 的新文件描述符。 简单来说,当你调用 dup 或 dup2 时,你得到的是一个别名或副本,这个新文件描述符和原始文件描述符指向同一个打开的文件,共享文件的: * 文件偏移量 (file offset): 通过一个描述符读写会改变文件位置,通过另一个描述符读写会从新的位置开始。

Read More

dup3系统调用及示例

1. 函数介绍 dup3 是 Linux 系统调用,是 dup2 的扩展版本。它用于将一个已存在的文件描述符复制到指定的目标文件描述符,类似于 dup2,但提供了额外的标志参数来控制复制行为。 这个函数的主要优势是可以设置文件描述符标志,最常用的是 O_CLOEXEC 标志,该标志使得复制的文件描述符在执行 exec 系列函数时自动关闭,避免了文件描述符泄漏到新程序中。 2. 函数原型 1 2 3 4 5 6 #define _GNU_SOURCE #include #include int dup3(int oldfd, int newfd

Read More

epoll_create系统调用及示例

epoll_create - 创建epoll实例 函数介绍 epoll_create系统调用用于创建一个epoll实例,返回一个文件描述符,用于后续的epoll操作。epoll是Linux特有的I/O多路复用机制,比传统的select和poll更高效。 函数原型 1 2 3 4 5 6 #include #include #include int epoll_create(int size); 功能 创建一个新的epoll实例,用于监控多个文件描述符的I/O事件。 参数 * int size:

Read More

epoll_pwait系统调用及示例

epoll_pwait - 带信号掩码的epoll等待 函数介绍 epoll_pwait是epoll_wait的扩展版本,支持在等待期间设置临时的信号掩码,提供了更精确的信号控制能力。 函数原型 1 2 3 4 5 6 7 #include #include int epoll_pwait(int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *sigmask);

Read More

epoll_wait系统调用及示例

epoll_wait - 等待epoll事件 函数介绍 epoll_wait系统调用用于等待epoll实例中的文件描述符就绪事件。它是epoll机制的核心函数,用于高效地等待多个文件描述符的I/O事件。 函数原型 1 2 3 4 5 #include int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); 功能 等待epoll实例中的事件就绪,返回就绪的事件数组。 参数 * int epfd: epoll实例的

Read More

epoll_create1系统调用及示例

epoll_create1 - 创建epoll实例(扩展版) 函数介绍 epoll_create1是epoll_create的扩展版本,支持额外的标志位参数,提供了更多的控制选项。 函数原型 1 2 3 4 #include int epoll_create1(int flags); 功能 创建一个新的epoll实例,支持额外的标志位控制。 参数 int flags: 控制标志 * 0: 与epoll_create(size)相同 * EPOLL_CLOEXEC: 设置文件描述符在exec时自动关闭 返回值

Read More

epoll_ctl系统调用及示例

epoll_ctl - 控制epoll实例 函数介绍 epoll_ctl系统调用用于控制epoll实例,可以添加、修改或删除要监视的文件描述符。 函数原型 1 2 3 4 #include int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); 功能 对epoll实例进行控制操作,管理要监视的文件描述符。 参数 * int epfd: epoll实例的文件描述符 int op: 操作类型 * EPOLL_CTL_ADD: 添加文件描述符到监视集合

Read More