1. open函数
通过open系统调用可以打开一个文件并返回该文件的文件描述符,同理,close系统调用可以通过文件描述符关闭一个文件。
函数原型:
<unistd.h>
<fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数说明:
pathname: 指定要打开文件的路径
int flags:用于指定打开文件的读写权限方式
mode_t mode: 用于指定文件的访问权限(文件组,用户,其他权限,例如:0644)
返回值说明:
fd 是open函数的返回值(实际上是open函数打开文件成功时返回的整型文件描述符,关于文件描述符后面解释),如果打开失败返回- 1
2. flags常见选项
flags选项一般有以下几种常用方式:
O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR :以可读写方式打开文件
以上这三种方式,只能指定其中一种,不可以组合使用(O_RDONLY | O_WRONLY),可利用“|”运算符和其他选项进行组合使用,比如:O_WRONLY | O_APPEND(以只写方式打开文件,并且每次写入的数据会追加到文件末尾)。
O_SYNC:以同步方式打开文件
O_CREAT:若打开的文件不存在则自动创建该文件
O_TRUNC:如果打开的文件存在并且以可写方式打开,则将文件的数据全部清空
O_NONBLOCK:以非阻塞式打开文件,无论有无数据或等待,都会立即返回进程之中
O_APPEND:每次打开文件后,新写入的数据会追加到文件末尾,如果不指定,则新写入的数据会从文件起始位置开始写,这会覆盖原来的数据。
O_EXCL:若打开的文件存在则出错,如果设置了O_CREAT的话,会先去检查文件是否存在,不存在则创建该文件,存在的话将出错,可用于测试一个文件是否存在。
3. close函数
close函数用于关闭一个文件,如果不主动调用close函数关闭打开的文件,进程结束时也会自动关闭进程所打开的文件,但是最好的方式是在使用完文件,主动调用close关闭文件,释放系统资源。换句话说,close文件时,会释放存放打开文件信息的结构体空间。
函数原型:
int close(int fd);
参数fd:已打开的文件的文件描述符
返回值:成功返回0,失败-1
4. 打开关闭文件
使用open和close打开并关闭一个文件
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
int main(void)
{
int fd = open(“test.txt” , O_RDWR | O_CREAT);
if(-1 == fd){
perror(“open”);
//使用errno必须包含errno.h
//printf(“errno = %d\n”, errno);
return -1;
}
printf(“fd = %d\n”, fd);
close(fd);
return 0;
}