<aside> 💡 fcntl 根据 cmd 参数的不同可以实现多种功能,主要功能有:复制文件描述符、设置/获取文件的状态标志等
</aside>
参数
fd
:文件描述符cmd
:表示对文件描述符进行如何操作(通过fcntl函数定义的一些宏来指定)
F_DUPFD
:复制文件描述符(复制fd,得到一个新的文件描述符并将其返回)
F_GETFL
:获取指定的文件描述符文件状态flag(即调用open函数时传递的flag参数)
F_SETFL
:设置文件描述符的文件状态flag
flag
的必选项不可被修改(O_RDONLY
等)
可选项可被修改(O_APPEND
、O_NONBLOCK
等)
O_APPEND
:追加数据(需要有写数据的权限)O_NONBLOCK
:设置为非阻塞/不阻塞追加方法:使用 按位或运算符( | )
// 获取文件描述符状态flag
int flag = fcntl(fd, F_GETFL);
// 在原先的flag上追加设置
flag |= O_APPEND; // flag = flag | O_APPEND
// 修改文件描述符状态的flag,给flag加入O_APPEND这个标记
int ret = fcntl(fd, F_SETFL, flag);