Linux文件I/O
# 系统I/O
1. open()
函数原型:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
函数参数:
参数 | 意义 |
---|---|
pathname | 打开/创建的文件名 |
flags | 文件的打开模式,常用O_RDONLY, O_WRONLY, O_RDWR |
mode | 创建文件时需要指定,用来设置创建文件的权限(rwx) |
flags
的可加选项:O_APPEND、O_CREAT、O_EXCL、O_SYNC、O_NONBLOCKmode
的选项:user权限00700(可以是7,4,2,1),group权限00070,other权限00007
返回值:
- 返回值类型:
int
- 调用成功时返回一个文件描述符
fd
- 调用失败时返回
-1
,并设置errno
2. read()
函数原型:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
函数参数:
参数 | 意义 |
---|---|
fd | 即将读取文件的文件描述符 |
buf | 存储读入数据的缓冲区 |
count | 将要读入的数据的个数 |
返回值:
- 返回值类型是:
ssize_t
,32位机上等同于int
- 成功时返回读取的字节数
- 出错时返回EOF,读到文件末返回0
3. write()
函数原型:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
函数参数:
参数 | 意义 |
---|---|
fd | 即将读取文件的文件描述符 |
buf | 要写入的数据缓冲区 |
count | 写入数据的个数,大小不应该大于buf大小 |
返回值:
- 返回值类型为:
ssize_t
- 成功时返回写入的字节数
- 出错时返回EOF,读到文件末返回0
4. close()
函数原型:
#include <unistd.h>
int close(int fd);
函数参数:
- fd: 要关闭的文件描述符。
返回值:
- 关闭成功时返回0,出错时返回EOF.。
说明:
- 程序在结束时会自动关闭所有打开的文件。
- 文件被关闭后,再对文件进行任何操作都是无意义的。
5. lseek()
函数原型:
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
函数参数:
参数 | 意义 |
---|---|
fd | 文件描述符 |
offset | 偏移量,可正可负 |
whence | 指定一个基准点,基准点+偏移量等于当前位置 |
- whence的选项:SEEK_SET开头、SEEK_CUR当前、SEEK_END末尾
返回值:
- 返回值类型为:
off_t
, 32位机等同于int - 成功时则返回目前的读写位置, 也就是距离文件开头多少个字节
- 出错时返回-1, errno 会存放错误代码.
# 标准I/O
需包含头文件#include <stdio.h>
1. fopen()
函数原型:
FILE *fopen(const char *path, const char *mode);
函数参数:
参数 | 意义 |
---|---|
path | 打开/创建的文件名 |
mode | 文件的打开模式 |
关于mode
的选项有:r只读,r+读写;w只写,w+读写,a追加写,a+追加读写。其中除了r和r+其他都会在文件不存在时创建文件。
返回值:
- 成功时返回一个文件流指针:
FILE*
- 失败时返回
NULL
2. fread()
函数原型:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数参数:
参数 | 意义 |
---|---|
ptr | 接收数据的地址,最小尺寸size*nmemb 字节 |
size | 每次读取的一个单元的大小,单位字节 |
nmemb | 读取的单元个数 |
stream | 即将读取文件的文件流 |
返回值:
- 返回值类型为:
size_t
,在32位机等价于unsigned int
- 成功时返回实际读取的单元个数
- 文件结束或读取出错时返回一个小于nmemb的数
3. fwrite()
函数原型:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
函数参数:
参数 | 意义 |
---|---|
ptr | 要写入文件的数据的地址 |
size | 每次写入的一个单元的大小 |
nmemb | 写入的单元个数 |
stream | 即将写入文件的文件流 |
返回值:
- 返回值类型为:
size_t
- 成功时返回实际写入的单元个数
- 出错时返回一个与
nmemb
不同的数
4. fclose()
函数原型:
int fclose(FILE *stream);
函数参数:
stream
: 要关闭的文件流指针
返回值:
- 成功时返回0
- 失败时返回
EOF
,并设置errno
2022.04.20