记录一下Ubuntu(Linux)下文件通用操作
很多知识点搞不懂,有时间了在详细记录一下
以下内容参考自:
L i n u x Linux Linux网络编程(第 2 2 2版)
https://www.cnblogs.com/Lxk0825/p/10216694.html
操作文件常用头文件:
头文件 | 含义 |
---|---|
<sys/stat.h> | 文件状态头文件,含有文件或文件系统状态结构stat{}和常量 |
<sys/types.h> | 类型头文件,定义了基本的系统数据类型 |
<fcntl.h> | 文件控制头文件,用于文件及其描述符的操作控制常数符号的定义。 |
open()函数
头文件:<fcntl.h>
函数原型:
int open(const char *pathname, int flags)$
int open(const char* pathname, int flags, mode_t mode)$
参数:
参数 | 含义 |
---|---|
pathname | 需要打开的文件及其路径 |
flags | 文件打开后允许的操作 |
mode | 用于打开文件的权限,mode 的使用必须结合 flags 为 O_CREAT 时使用 |
作用:
打开 pathname 指定的文件,当函数成功时,返回一个整型的文件描述符。出错时返回-1。
flag参数选项:
选项 | 含义 |
---|---|
O_RDONLY | 以只读方式打开文件 |
O_WRONLY | 以只写方式打开文件 |
O_RDWR | 以可读写方式打开文件 |
O_APPEND | 使每次对文件进行写操作都追加到文件的尾端 |
O_CREAT | 如果文件不存在则创建它,当使用此选项时,第三个参数 mode 需要同时设定,用来说明新文件的权限 |
O_EXCL | 查看文件是否存在。如果同时指定了 O_CREAT,且 pathname 文件存在,则返回错误。如果不存在,则创建该文件 |
O_TRUNC | 将文件长度截断为0。如果此文件存在,并且文件成功打开,则会将其长度截断为0 |
O_NONBLOCK | 打开文件为非阻塞方式。默认的打开方式为阻塞方式,即对文件读写操作需要等待操作的返回状态 |
O_NOCTTY | 如果欲打开的文件为终端机设备时,则不会将该终端机当成进程控制终端机 |
O_SYNC | 以同步的方式打开文件 |
O_NOFOLLOW | 如果参数 pathname 所指的文件为一符号连接,则会令打开文件失败 |
O_DIRECTORY | 如果参数 pathname 所指的文件并非为一目录,则会令打开文件失败 |
注意:O_RDONLY、O_WRONLY、O_RDWR这三种选项是互斥的,也就是不可同时使用,但可与其余的选项利用 | 运算符组合。
mod参数选项
选项 | 值 | 含义 |
---|---|---|
S_IRWXU | 00700 | 用户(文件所有者)有读写和执行的权限 |
S_IRUSR | 00400 | 用户对文件有读权限 |
S_IWUSR | 00200 | 用户对文件有写权限 |
S_IXUSR | 00100 | 用户对文件有执行权限 |
S_IRWXG | 00070 | 组用户(文件所有者)有读写和执行的权限 |
S_IRGRP | 00040 | 组用户对文件有读权限 |
S_IWGRP | 00020 | 组用户对文件有写权限 |
S_IXGRP | 00010 | 组用户对文件有执行权限 |
S_IRWXO | 00007 | 其他用户(文件所有者)有读写和执行的权限 |
S_IROTH | 00004 | 其他文件对文件有读权限 |
S_IWOTH | 00002 | 其他用户对文件有写权限 |
S_IXOTH | 00001 | 其他用户对文件有执行权限 |
creat()函数
头文件:<fcntl.h>
函数原型:
int creat(const char *pathname, mode_t mode)
参数:
参数 | 含义 |
---|---|
pathname | 需要创建的文件及其路径 |
mode | 用于打开文件的权限 |
其实 creat() 函数就相当于 open() 函数的一个缩写版本。
作用:
创建 pathname 指定的文件,当函数成功时,返回一个整型的文件描述符。出错时返回-1。