setsockopt系统调用及示例

1. 函数介绍 setsockopt (Set Socket Options) 是一个 Linux 系统调用,用于在已创建的套接字上设置各种选项(options)或参数(parameters)。这些选项控制着套接字的行为和底层协议的特定方面。 你可以把 setsockopt 想象成调整收音机或电视机的设置: * 你有一个设备(套接字)。 * 这个设备有很多可以调整的旋钮和开关(选项),比如音量(SO_RCVBUF)、音质(SO_REUSEADDR)、电源(SO_KEEPALIVE)等。 * setsockopt 就是让你转动这些旋钮、切换这些开关,来改

Read More

settimeofday系统调用及示例

settimeofday 函数详解 1. 函数介绍 settimeofday 是Linux系统调用,settimeofday系统调用及示例,用于设置系统的日期和时间。它允许特权进程修改系统时钟,是系统管理和时间同步的重要工具。这个函数通常由系统管理员或时间同步服务(如NTP)使用。 2. 函数原型 1 2 3 #include int settimeofday(const struct timeval *tv, const struct timezone *tz); 3. 功能 settimeofday 设置系统的当前日期和时间。它可以精确到微

Read More

setuid系统调用及示例

我们来深入学习 setuid 系统调用 1. 函数介绍 在 Linux 系统中,每个进程都运行在一个特定的用户 (User) 上下文中。这个用户上下文决定了进程拥有哪些权限,比如能否读写某个文件、能否绑定到特权端口(端口号小于 1024)等。 每个进程通常有三类相关的用户 ID: * 真实用户 ID (Real User ID - RUID): 登录系统时分配给用户的 ID。它标识了“你是谁”。 * 有效用户 ID (Effective User ID - EUID): 内核用来进行权限检查时使用的 ID。它决定了“你能做什么”。这是最重要的一个。

Read More

setxattr系统调用及示例

setxattr 函数详解 1. 函数介绍 setxattr 是 Linux 系统中用于设置文件扩展属性(Extended Attributes,简称 xattrs)的系统调用。可以把扩展属性想象成”文件的隐藏标签”或”元数据贴纸”——它们是附加在文件上的额外信息,不会影响文件内容,但可以存储各种有用的元数据。 就像你可以在文件上贴便利贴记录信息一样,扩展属性允许你为文件附加自定义的元数据,比如: * 安全标签(SELinux 等) * 访问控制列表 * 用户自定义的注释或标记 * 备份状态信息 * 文件分类标签

Read More

shutdown系统调用及示例

我们继续学习 Linux 系统编程中的重要函数。这次我们介绍 shutdown 函数,它用于部分或完全地关闭一个面向连接的套接字(如 TCP 套接字)的数据传输。 1. 函数介绍 shutdown 是一个 Linux 系统调用,专门用于更精细地控制已连接套接字的关闭过程。与 close 函数不同(close 会完全关闭套接字,释放其文件描述符),shutdown 允许你: 关闭数据流的一个方向:例如,告诉对方“我不会再发送数据了”(但仍可以接收数据)。 关闭数据流的两个方向:完全禁止在此套接字上进行任何发送和接收操作(但仍保持文件描述符打开,直到调用 close)。 你可以把 shut

Read More

sigaltstack系统调用及示例

sigaltstack 函数详解 1. 函数介绍 sigaltstack 是Linux系统调用,用于设置和获取信号处理程序的备用栈(alternate signal stack)。当进程收到信号时,内核通常在当前栈上执行信号处理程序。使用 sigaltstack 可以为信号处理程序指定一个独立的栈空间,这对于处理栈溢出等异常情况特别有用。 2. 函数原型 1 2 3 #include int sigaltstack(const stack_t *ss, stack_t *oss); 3. 功能 sigaltstack 允许进程为信号处理程序设置一个

Read More

signalfd4系统调用及示例

signalfd64 1. 函数介绍 在传统的 Linux 信号处理中,我们使用 sigaction 来设置信号处理函数。当信号到达时,内核会中断程序的正常执行流程,转而去执行我们注册的处理函数。这是一种异步的处理方式。 但是,有时候我们希望用一种同步、基于文件描述符 (File Descriptor) 的方式来处理信号。这样做的好处是: https://www.calcguide.tech/2025/08/11/signalfd4系统调用及示例/ 统一 I/O 模型:可以将信号处理集成到 select, poll, epoll 等 I/O 多路复用机制中。程序可以像等待文件描述符就绪

Read More

fadvise64系统调用及示例

fadvise64 - 文件访问建议 函数介绍 fadvise64是一个Linux系统调用,用于向内核提供关于文件访问模式的建议。它帮助内核优化文件I/O操作,提高性能。 函数原型 1 2 3 4 5 6 #include #include #include int fadvise64(int fd, off_t offset, off_t len, int advice); 功能 向内核提供文件访问模式建议,帮助内核优化缓存和预读策略。 参数 * int fd: 文件描述符 * o

Read More

fallocate系统调用及示例

fallocate - 预分配文件空间 1. 函数介绍 fallocate 是 Linux 系统调用,用于为文件预分配磁盘空间。你可以把它想象成”预订”磁盘空间,就像你在餐厅预订座位一样——你告诉系统你需要多少空间,系统就为你预留出来,但此时还没有实际写入数据。 这个函数的主要优势是: * 提高文件系统性能:避免文件碎片 * 确保文件有足够空间:防止写入时空间不足 * 快速操作:比实际写入数据更快 2. 函数原型 1 2 3 4 #include int fallocate(int fd, int mode

Read More

signalfd系统调用及示例

好的,我们来深入学习 signalfd 和 signalfd4 系统调用 signalfd 1. 函数介绍 在传统的 Linux 信号处理中,我们使用 sigaction 来设置信号处理函数。当信号到达时,内核会中断程序的正常执行流程,转而去执行我们注册的处理函数。这是一种异步的处理方式。 但是,有时候我们希望用一种同步、基于文件描述符 (File Descriptor) 的方式来处理信号。这样做的好处是: 统一 I/O 模型:可以将信号处理集成到 select, poll, epoll 等 I/O 多路复用机制中。程序可以像等待文件描述符就绪一样等待信号。 避免信号处理函数的复杂性

Read More