-
直接转换方法:从fcntl函数到模块结构图的数据流图
资源介绍
3.13 fcntl函数
f c n t l函数可以改变已经打开文件的性质。
#include
#include
#include
int fcntl(int f i l e d e s, int c m d,.../* int a rg * / ) ;
返回:若成功则依赖于 c m d(见下),若出错为- 1
在本节的各实例中,第三个参数总是一个整数,与上面所示函数原型中的注释部分相对应。但
是1 2 . 3节说明记录锁时,第三个参数则是指向一个结构的指针。
f c n t l函数有五种功能:
• 复制一个现存的描述符(c m d=F _ D U P F D)。
• 获得/设置文件描述符标记(c m d = F _ G E T F D或F _ S E T F D)。
• 获得/设置文件状态标志(c m d = F _ G E T F L或F _ S E T F L)。
• 获得/设置异步I / O有权(c m d = F _ G E TO W N或F _ S E TO W N)。
• 获得/设置记录锁(c m d = F _ G E T L K , F _ S E T L K或F _ S E T L K W)。
我们先说明这十种命令值中的前七种 ( 1 2 . 3节说明后三种,它们都与记录锁有关 )我们将涉
及与进程表项中各文件描述符相关联的文件描述符标志,以及每个文件表项中的文件状态标志,
见图3 - 1。
• F_DUPFD 复制文件描述符 f i l e d e s,新文件描述符作为函数值返回。它是尚未打开的各
描述符中大于或等于第三个参数值(取为整型值)中各值的最小值。新描述符与 filedes 共享同
一文件表项(见图 3 - 3)。但是,新描述符有它自己的一套文件描述符标志,其 F D _ C L O E X E C
文件描述符标志则被清除(这表示该描述符在 exec 时仍保持开放,我们将在第 8章对此进行
讨论)。
第 3章 文 件 I/O 4 7