Linux提供了很多高级的I/O函数。它们并不像Linux基础I/O函数(比如open和read)那么常用(编写内核模块时一般要实现这些I/O函数),但在特定的条件下却表现出优秀的性能。这些函数大致分为三类:
用于创建文件描述符的函数,包括pipe、socketpair、dup/dup2函数。
用于读写数据的函数,包括readv/writev、sendfile、mmap/munmap、splice和tee函数。
用于控制I/O行为和属性的函数,包括fcntl函数。
本节接着介绍第三类
一、fcntl函数
fcntl
函数全称是 file control
。该函数提供了对文件描述符的各种控制操作。另外一个常见的控制文件描述符属性和行为的系统调用是ioctl
,而且ioctl
比fcntl
能够执行更多的控制。但是,对于控制文件描述符常用的属性和行为,fcntl
函数是由POSIX规范指定的首选方法。
#include <fcntl.h>
int fcntl(int fd, int cmd, ...);
-
fd
参数是被操作的文件描述符 -
cmd
参数指定执行何种类型的操作
下面是一些常见的操作