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 <unistd.h>
#include <fcntl.h>
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);