Linux系统文件描述符属性与设置

Linux系统下一切皆是文件,而我们要去操作一个文件,则是通过文件描述符fd(句柄)来实现的。

不同的文件描述符自然具有不同的属性,同一个文件描述符属性也可以进行修改。

文件描述符属性的设置有两种方式,一种是使用open函数打开文件时设置,通过指定open函数的参数来指定文件描述符的读写属性。另外一种方式是通过fcntl函数来进行设置

1、open函数设置

open函数的原型如下:

int   open(char *pathname,int access[,int permiss])

函数返回一个文件描述符fd,可以通过指定access来对fd进行属性设置。常见的属性如下:

access

含义

O_RDONLY

读文件

O_WRONLY

写文件

O_RDWR

读写文件

O_APPEND

读写文件,但是每次在末尾写

O_CREAT

若文件不存在,则创建新文件

O_BINARY

以文进制方式打开文件

2、fcntl函数设置

通过man手册查看fcntl函数原型:

NAME
       fcntl - manipulate file descriptor

SYNOPSIS
       #include 
       #include 

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

该函数可以获取或者设置文件描述符的属性。这是通过参数cmd来指定的。

cmd为F_GETFL时,表示获取文件描述符的属性,此时不用第三个参数

cmd为F_SETFL时,表示设置文件描述符的属性,此时第三个参数指定要设置的属性

返回值:

失败:-1

成功:F_GETFL时返回获取的文件描述符属性,F_SETFL时返回值为0

基本用法为:

int flags; //保存属性
flags = fcntl(0, F_GETFL); //  1、获取属性
//2、在原属性基础上修改
flags |= O_NONBLOCK;
//3.修改的属性再设置回去
fcntl(0, F_SETFL, flags);

你可能感兴趣的:(Linux就该这么学,操作系统,linux,文件描述符,fcntl,属性设置)