Linux fcntl函数

fcntl()


头文件

#include <unistd.h>
#include <fcntl.h>

函数原型

int fcntl(int fd, int cmd, ... /*  arg  */);

功能

fcntl函数可以改变已打开的文件的性质。若成功将依赖cmd,错误时返回-1。


参数


cmd = F_GETFD;  //获得描述符(void)
cmd = F_DUPFD;  //复杂一个现有的描述符(long)
cmd = F_SETFD;  //设置描述符(long)
cmd = F_GETEL;  //获取文件状态标志(void)
cmd = F_SETTEL;  //设置文件状态标志(long)
cmd = F_GETOWN;  //获得异步I/O所有权(void)
cmd = F_SETOWN;  //设置异步I/O所有权(long)
cmd = F_GETLK;  //获取记录锁(struct flock *)
cmd = F_SETLK;  //设置记录锁(struct flock *)
cmd = F_SETLKW;  //一样(struct flock *)


文件状态标志



unix高级环境编程中的例子

#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char * argv[])
{
	int val;

	if(argc != 2)
	{
		printf("usage: a.out <descriptor>");
	}

	if((val = fcntl(atoi(argv[1]), F_GETFL, 0)) < 0)
	{
		printf("fcntl error for fd %d", atoi(argv[1]));
	}

	switch(val & O_ACCMODE)
	{
		case O_RDONLY :
			printf("read only\n");
			break;
		case O_WRONLY :
			printf("write only\n");
			break;
		case O_RDWR :
			printf("read write");
			break;
		default:
			printf("unknown access mode\n");
	}

	if(val & O_APPEND)
	{
		printf(", append");
	}


	if(val & O_NONBLOCK)
	{
		printf(", nonblocking\n");
	}


#if defined(O_SYNC)
	if(val & O_SYNC)
	{
		printf(", synchronous writes");
	}
#endif

#if !defined(_POSIX_C_SOURCE) && defined(O_FSYNC)
	if(val & O_FSYNC)
	{
		printf(", synchronous writes");
	}
#endif
	putchar('\n');
	exit(0);

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值