自信·学会静心

你是自己

My Links

Blog统计

公告

Life has just began.

文章

收藏

相册

Open Source

好友

存档


正在读取评论……

3.13 fcntl函数
f c n t l函数可以改变已经打开文件的性质。
#include
#include
#include
int fcntl(int filedes, int cmd,.../* int arg * / ) ;
返回:若成功则依赖于cmd(见下),若出错为- 1
在本节的各实例中,第三个参数总是一个整数,与上面所示函数原型中的注释部分相对应。但
是1 2 . 3节说明记录锁时,第三个参数则是指向一个结构的指针。
f c n t l函数有五种功能:
? 复制一个现存的描述符(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)。
我们先说明这十种命令值中的前七种( 1 2 . 3节说明后三种,它们都与记录锁有关)我们将涉
及与进程表项中各文件描述符相关联的文件描述符标志,以及每个文件表项中的文件状态标志,
见图3 - 1。
? F_DUPFD 复制文件描述符filedes,新文件描述符作为函数值返回。它是尚未打开的各
描述符中大于或等于第三个参数值(取为整型值)中各值的最小值。新描述符与filedes 共享同
一文件表项(见图3 - 3)。但是,新描述符有它自己的一套文件描述符标志,其FD_CLOEXEC
文件描述符标志则被清除(这表示该描述符在exec 时仍保持开放。)

? F_GETFD 对应于filedes 的文件描述符标志作为函数值返回。当前只定义了一个文件描
述符标志F D _ C L O E X E C。
? F_SETFD 对于filedes 设置文件描述符标志。新标志值按第三个参数(取为整型值)设置。
应当了解很多现存的涉及文件描述符标志的程序并不使用常数F D _ C L O E X E C,而是将此
标志设置为0 (系统默认,在e x e c时不关闭)或1 (在e x e c时关闭)。
? F_GETFL 对应于filedes 的文件状态标志作为函数值返回。在说明o p e n函数时,已说明
了文件状态标志。它们列于表3 - 2中。
表3-2 对于f c n t l的文件状态标志
文件状态标志说明
O _ R D O N L Y 只读打开
O _ W R O N L Y 只写打开
O _ R D W R 读/写打开
O _ A P P E N D 写时都添加至文件尾
O _ N O N B L O C K 非阻塞方式
O _ S Y N C 等待写完成
O _ A S Y N C 异步I / O(仅4 . 3 + B S D)
不幸的是,三个存取方式标志( O _ R D O N LY, O _ W R O N LY,以及O _ R D W R )并不各占1位。(正
如前述,这三种标志的值各是0、1和2,由于历史原因。这三种值互斥—一个文件只能有这
三种值之一。)因此首先必须用屏蔽字O _ A C C M O D E取得存取方式位,然后将结果与这三种值
相比较。
? F_SETFL 将文件状态标志设置为第三个参数的值(取为整型值)。可以更改的几个标志是:
O _ A P P E N D,O _ N O N B L O C K,O _ S Y N C和O _ A S Y N C。
? F_GETOWN 取当前接收S I G I O和S I G U R G信号的进程I D或进程组I D。1 2 . 6 . 2节将论述这
两种4 . 3 + B S D异步I / O信号。
? F_SETOWN 设置接收S I G I O和S I G U R G信号的进程I D或进程组I D。正的a rg指定一个进
程I D,负的a rg表示等于a rg绝对值的一个进程组I D。
f c n t l的返回值与命令有关。如果出错,所有命令都返回- 1,如果成功则返回某个其他值。
下列三个命令有特定返回值:F_DUPFD,F_GETFD, F_GETFL以及F _ G E TO W N。第一个返回新
的文件描述符,第二个返回相应标志,最后一个返回一个正的进程I D或负的进程组I D。



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=43225


[点击此处收藏本文]  发表于2004年07月14日 11:22 AM




正在读取评论……
大名
网址
验证码
评论