文件IO
2021-05-31 12:46:14 星期一
目录
文件描述符:是有限资源
文件描述符 | POSIX名称 | 用途 | stdio流 |
---|---|---|---|
0 |
STDIN_FILENO |
标准输入 | stdin |
1 |
STDOUT_FILENO |
标准输出 | stdout |
2 |
STDERR_FILENO |
标准错误 | stderr |
基础IO
open
#include <fcntl.h>
int open(const char *path, int oflag, mode_t mode);
path
文件的路径和名称flag
文件的打开模式,组合使用时需要使用位运算或- 基本模式
-
只读 只写 读写 O_RDONLY
O_WRONLY
O_RDWR
00
01
02
-
- 附加模式(只列常用)
O_APPEND
:总是在文件末尾添加数据O_EXCL
:配合O_CREAT
标志- 表明如果文件存在则不会打开文件,并使open调用失败,否则能够创建并打开文件。这样确保了调用
open()
的进程即为创建文件的进程. - 同时不允许path是符号链接
- 表明如果文件存在则不会打开文件,并使open调用失败,否则能够创建并打开文件。这样确保了调用
O_CREAT
:没有文件存在时会创建文件,需要mode参数指明文件权限,一共9个O_TRUNC
:如果文件存在且为普通文件且该进程对改文件有写权限,则清空文件内容
- 基本模式
mode
S_IRUSR
:文件所有者有读权限S_IWUSR
:文件所有者有写权限S_IXUSR
:文件所有者有执行权限S_IRGRP
:同组用户有读权限S_IWGRP
:同组用户有写权限S_IXGRP
:同组用户有执行权限S_IROTH
:其他用户有读权限S_IWOTH
:其他用户有写权限S_IXOTH
:其他用户有执行权限
- 返回文件描述符
fd
或者-1
错误
creat
旧版使用,新版都用open进行创建文件
read
将open
返回的fd
文件描述符中读取bytes
字节的数据到buf
中,返回实际读取的字节数,不成功返回-1
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t bytes);
- 当
read
普通文件:调用成功返回实际读取的字节数,遇到文件EOF
时返回0
,出现错误返回-1
。 - 当
read
读取终端,遇到n
即返回
注意:read
系统调用是逐字节读取的,所以无法遵守C语言中的字符串的规则。比如C语言中字符串以