fcntl函数的应用

  fcntl函数:int
fcntl(int filedes, int cmd, .../*int arg */);
返回:若成功则依赖于cmd,若出错为-1。
作用:可以改变已打开的文件的性质
下列三个命令有特定的返回值:F_DUPFD,F_GETFD以及F_GETOWN。第一个返回新的文件描述符,第二个返回相应标志,最后一个返回一个正的进程ID或负的进程组ID。
第三个参数总是一个整数,当然在作为记录锁用时,第三个参数则是指向一个结构的指针。
fcntl函数有五种功能:
(1)复制一个现存的描述符(cmd=F_DUPFD)
(2)获得/设置文件描述符标志(cmd=F_GETFD或F_SETFD)
(3)获得/设置文件状态标志(cmd=F_GETFL或F_SETFL)
(4)获得/设置异步I/O有权(cmd=F_GETOWN或F_SETOWN)
(5)获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW)
F_DUPFD:复制文件描述符filedes,新文件描述符作为函数值返回。它是尚未打开的各描述符中大于或等于第三个参数值中各值的最小值。新描述符与filedes共享同一文件表项。但是新描述符有它自己的一套文件描述符标志,其FD_CLOEXEC文件描述符标志被清除。
F_GETFD:对应于filedes的文件描述符标志作为函数值返回。当前只定义了一个文件描述符标志FD_CLOEXEC。
F_SETFD:对于filedes设置文件描述符标志。新标志值按第三个参数设置。
F_GETFL:对应于filedes的文件状态标志作为函数返回。在说明open函数时,已说明了文件状态标志。
F_SETFL:将文件状态标志设置为第三个参数的值(取整数值),可以更改的几个标志:O_APPEND,O_NONBLOCK,O_SYNC和O_ASYNC。
F_GETOWN:取当前接受SIGIO和SIGURG信号的进程ID或进程组ID。
F_SETOWN:设置接受SIGIO和SIGURG信号的进程ID或进程组ID。正的arg指定一个进程ID,负的arg表示等于arg绝对值的一个进程组ID。
范例:
#include

#include

#include

#include

int main(int argc, char **argv)
{
int fd;
int var;
if(argc!=2)
{
printf("please
input filename and one arg!\n");
exit(1);
}

if((var=fcntl(atoi(argv[1]),F_GETFL,0))==-1)
{
printf("fcntl
file error!\n");
exit(1);
}
printf("%d\n",var);
switch(var& O_ACCMODE)
{
case O_RDONLY:

printf("Read only.\n");
break;
case O_WRONLY:

printf("Write only.\n");
break;
case O_RDWR:

 printf("Read Write.\n");
break;
default:

break;
}
exit(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值