3.13 fcntl函数 fcntl函数可以改变已经打开文件的性质。


#include <sys types.h="">

#include <unistd.h>

#include <fcntl.h>

int fcntl(int filedes, int cmd,.../* int arg */ );

</fcntl.h></unistd.h></sys>

返回:若成功则依赖于cmd(见下),若出错为-1

在本节的各实例中,第三个参数总是一个整数,与上面所示函数原型中的注释部分相对应。但是12.3节说明记录锁时,第三个参数则是指向一个结构的指针。

fcntl函数有五种功能:

  • 复制一个现存的描述符(cmd=F_DUPFD)。

  • 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD)。

  • 获得/设置文件状态标志(cmd=F_GETFL或F_SETFL)。

  • 获得/设置异步I/O有权(cmd=F_GETOWN或F_SETOWN)。

  • 获得/设置记录锁(cmd=F_GETLK, F_SETLK或F_SETLKW)。

我们先说明这十种命令值中的前七种(12.3节说明后三种,它们都与记录锁有关)。我们将涉及与进程表项中各文件描述符相关联的文件描述符标志,以及每个文件表项中的文件状态标志。

  • F_DUPFD 复制文件描述符filedes,新文件描述符作为函数值返回。它是尚未打开的各描述符中大于或等于第三个参数值(取为整型值)中各值的最小值。新描述符与filedes共享同一文件表项。但是,新描述符有它自己的一套文件描述符标志,其FD_CLOEXEC文件描述符标志则被清除(这表示该描述符在exec时仍保持开放,我们将在第8章对此进行讨论)。

了解更多关于fcntl函数复制文件描述符的内容,请参考fcntl函数复制文件描述符

更多关于fcntl函数的调用信息,请访问fcntl的调用

如果你对压缩文件感兴趣,可以查看fcntl压缩文件

下图展示了更多关于fcntl函数的信息:

fcntl函数-鸿鹄论坛_华为认证h35-211-hcnp-access network题库