一、open函数
1、作用
open函数可以打开或者创建一个文件。
#include <fcntl.h>
int open(const char *path, int oflag);
int open(const char *path, int oflag, mode_t mode); //创建新文件时,需要指定文件的访问权限位mode
2、返回值
若成功则返回文件描述符;若出错则返回-1。
3、参数含义
path:
要打开或者创建的文件的绝对路径。若想使用相对路径,则可以使用如下函数:
#include <fcntl.h>
int openat(int fd, const char *path, int oflag);
int openat(int fd, const char *path, int oflag, mode_t mode); //创建新文件时,需要指定文件的访问权限位mode
该函数新增了一个参数fd,通过指定目录的文件描述符fd来定位,从而找到相对于fd的路径下的文件。
oflag:
用来说明函数执行所采用的模式,用下列一个或多个常量进行“或”运算构成oflag参数(这些常量在头文件<fcntl.h>中定义)。
- O_RDONLY 只读模式。
- O_WRONLY 只写模式。
- O_RDWR 可读可写。
- O_EXEC 执行模式。
上面五个常量中必须指定并且只能指定一个。下列常量则是可选的。
- O_APPEND 每次写时都追加到文件尾端。
- O_CREAT 若文件不存在则创建它。使用该选项时需要open函数说明第三个参数mode,用mode指定该新文件的访问权限位。
- O_DIRECTORY 如果path引用的不是目录则出错。
- O_EXCL 如果同时指定了O_CREAT,而文件已存在,则出错。可以用来测试一个文件是否存在,如果不存在则创建此文件,这使得测试和创建成为一个原子操作。
- O_NOCTTY 如果路径名指向终端设备,则不把这个设备用作控制终端。
- O_NOFOLLOW 如果path引用的是符号链接,则出错。
- O_NOBLOCK 如果path引用的是FIFO、块文件、字符文件,则将文件的本次打开和后续的 I/O操作设置为非阻塞方式。
- O_TRUNC 若文件存在,而且被只写或可读可写打开,则将其长度截断为0。
下面两个标志也是可选的,可以用于同步输入和输出。
- O_DSYNC 等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待 文件属性更新。
- O_SYNC 使每次write等待物理I/O的完成,包括文件属性更新的I/O。
- O_RSYNC 使read操作等待所有写入同一区域的写操作完成后再进行。
mode:
指定文件的权限位。
二、creat函数
1、作用
用于创建一个新文件
#include <fcntl.h>
int creat(const char *path, mode_t mode);
2、返回值
若成功则返回只写打开的文件描述符;若出错则返回-1。
此函数等同于open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);
三、close函数
1、作用
可以调用close函数来关闭一个被打开的文件。
#include <unistd.h>
int close(int fd);
2、返回值
若成功则返回0;若出错则返回-1。
当一个进程终止时,内核会自动关闭它所有的打开文件,所以一般可以不用调用这个函数,等待进程结束自动关闭即可。