Linux后台服务器编程。
分类: LINUX
2014-07-03 16:34:00
一、fcntl函数
int fcntl(int fildes, int cmd, .../*int arg*/);
1.fcntl函数可以改变已经打开的文件性质。
2.主要功能:
a.复制一个现有的描述符
F_DUPFD:新文件描述符作为函数值返回,大于或者等于第三个参数。新描述符与filedes共享一个文件表项。但是新描述符有自己的文件描述符标志。其文件描述符标志FD_CLOSEXEC文件描述符标志被清除。在exec的时候保持有效。
b.获得/设置文件描述符标记
F_GETFD:filedes文件描述符标志作为函数值返回。
F_SETFD:对于filedes设置文件描述符标志。新标志按第三个参数设置。
c.获得/设置文件状态标志
F_GETFL:filedes文件状态标志作为函数返回。对于读写由于不是各占一位,要判断必须和O_ACCMODE进行与运算再比较。
(通常只需要 val&O_APPEND )
F_SETFL:将文件标志设置为第三个参数的值。不可更改读写,只能更改其他属性。
d.获得/设置一部I/O所有权
e.获得/设置记录锁
二、ioctl
int ioctl(int fildes, int request, ... /* arg */);
1.ioctl是I/O操作的杂物箱,不能用其他函数表示的I/O操作通常都能用ioctl表示。终端I/O是ioctl用的最多的地方。
2.每个设备驱动程序都可以定义自己的ioctl。系统则为不同类别的设备提供通用的ioctl。
tianyashuibin2014-07-03 16:35:48
fcntl可以改变已经打开的文件的性质;
ioctl是io操作的杂货箱,不能用其他函数表示的io操作通常都能用ioctl表示。中断io是其使用最多的地方。