fcntl()函数的用法

fcntl()的作用是根据文件描述符来获取或设置文件的访问控制属性    

头文件:

#include <sys/types.h>

#include <unistd.h>

#include <fcntl.h>

 

函数定义:

int fcntl(int filedes, int cmd);

int fcntl(int filedes, int cmd, longarg);

int fcntl(int filedes, int cmd,structflock *lock);

参数:

fd:文件描述词。 

cmd:操作命令。  F_GETFL :读取文件状态标志。  F_SETFL :设置文件状态标志。

arg:供命令使用的参数。 

lock:加锁。 

 

返回值:

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

 

fcntl()的命令说明:

复制一个现存的描述符(cmd=F_DUPFD或F_DUPFD_CLOEXEC) 

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

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

获得/设置异步I/O所有权(cmd = F_GETOWN或F_ SETOWN)

获得/设置记录锁(cmd = F_GETLK , F_SETL K或F_SETLKW)

 

F_SETFD与F_SETFL的注意事项

在修改文件描述符标志或文件状态标志时必须谨慎,先要取得现在的标志值,然后按照希望修改它,最后设置新标志值。

不能只是执行 F_SETFD或F_SETFL命令,这样会关闭以前设置的标志位

 

#include <sys/types.h>

#include <unistd.h>

#include <fcntl.h>

int main(void){

int fd=fcntl(STDIN_FILENO,F_FGETFL);

fd=fd|O_NONBLOCK;

if(fcntl(STDIN_FILENO,SETFL,fd)<0)

perror("main fcntl");

exit(1);

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值