一、文件分类

1,普通文件(regular):存在于外部存储器中,用于存储普通数据。【-】
2,目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。【d】
3,管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道 FIFO。【p】
4,套接字文件(socket):一种用于网络间通信的特殊文件。【s】
5,链接文件(link):用于间接访问另外一个目标文件,相当于 Windows 快捷方式。【l】
6,字符设备文件(character):字符设备在应用层的访问接口。【c】
7,块设备文件(block):块设备在应用层的访问接口。【b】

二、系统IO函数

1、open 打开文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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);
参数:
const char *pathname:需要打开的文件名及路径
int flags: 文件打开的旗标,一般有O_RDONLY, O_WRONLY, or O_RDWR
O_TRUNC:文件已存在,删除文件中原有的数据
APPEND:以追加的形式打开文件
mode_t mode:创建新文件的时候给的文件操作权限
详细请见man手册或者《linux_C函数库中文手册》
返回值:
成功返回文件描述符,失败返回-1

2、read 读取文件内容

1
2
3
4
5
6
7
8
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
参数列表:
int fd:读取的文件描述符
void *buf:存放读取数据的空间
size_t count:准备读取count个字节的数据
返回值:
成功返回实际读到的字节个数,失败返回-1

3、write 向文件写数据

1
2
3
4
5
6
7
8
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
参数列表:
int fd:写入到哪个文件描述符
const void *buf:准备写入的数据
size_t count:准备写入count个字节的数据
返回值:
成功返回实际写入的字节个数,失败返回-1

4、lseek 调整文件访问位置

1
2
3
4
5
6
7
8
9
10
off_t lseek(int fd, off_t offset, int whence);
参数列表:
int fd:文件描述符
off_t offset:偏移量,可以大于0,可以小于0,也可以等于0
int whence:从哪里偏移:
SEEK_SET:从头偏移
SEEK_CUR:从当前访问位置
SEEK_END:从文件末尾偏移
返回值:
成功返回调整过后的文件访问位置,失败返回-1

5、ioctl / fcntl 文件控制

1
2
3
4
5
6
int ioctl(int fd, int request, ...);
参数:
int fd:待控制文件的描述符
int request:控制命令字
...:根据控制命令字来区别
int fcntl(int fd, int cmd, .../* arg */ );