函数
open函数oflag标志
符号 | 含义 |
---|---|
O_RDONLY | 只读打开 |
O_WRONLY | 只写打开 |
O_RDWR | 读写打开 |
O_EXEC | 只执行打开 |
O_SEARCH | 只搜索打开 |
O_APPEND | 每次写时都追加到文件的尾端 |
O_CLOEXEC | 把FD_CLOEXEC常量设置为文件描述符标志 |
O_CREAT | 若此文件不存在则创建 |
O_DIRECTORY | 如果引用的不是目录则出错 |
O_EXCL | 如果同时指定了O_CREAT而文件已经存在,则出错 |
O_NOCTTY | 如果引用的是终端设备,则不将该设备分配作为此进程的控制终端 |
O_NOFOLLOW | 如果引用的是一个符号链接,则出错 |
O_NONBLOCK | 如果引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则本次打开操作和后续的IO操作设置为非阻塞方式 |
O_SYNC | 使每次write等待物理IO操作完成,包括由该write操作引起的文件属性更新所需的IO |
O_TRUNC | 如果此文件存在,而且为只写或读-写成功打开,则将其长度截断为0 |
O_TTY_INIT | 如果打开一个未打开的终端设备,设置为非标准termios参数值 |
O_DSYNC | 使每次write要等待物理IO操作完成,但是如果该写操作并不影响读取刚写入的数据,则不需要等待文件属性被更新 |
O_RSYNC | 使每一个以文件描述符作为参数进行的read操作等待,直至所有对文件同一部分挂起的写操作都完成 |
由open和openat函数返回的文件描述符一定是最小的未用描述符数值
函数close
关闭一个文件时还会释放该进程加在该文件上的所有记录锁
函数lseek
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
- 若whence是SEEK_SET,则将该文件的偏移量设置为距文件开始处offset个字节
- 若whence是SEEK_CUR,则将该文件的偏移量设置为其当前值加offset,offset可为正或负
- 若whence是SEEK_END,则将该文件的偏移量设置为文件长度加offset,offset可正可负
lseek(fd, 0, SEEK_CUR); //确认打开文件的当前偏移量
这种方法也可用来确定所涉及的文件是否可以设置偏移量。如果文件描述符指向的是一个管道、FIFO或网络套接字,则lseek返回-1,并将errno设置为ESPIPE
函数read
有多重情况可使实际读到的字节数少于要求读的字节数
- 读普通文件时,在读到要求字节数之前已达到文件尾端
- 当从终端设备读时,通常一次最多读一行
- 当从网络读时,网络中的缓冲机制可能造成返回值小于所要求读的字节数
- 当从管道或FIFO读时,如若管道包含的字节少于所需的数量,那么read将只返回实际可用的字节数
- 当从某些面向记录的设备读时,一次最多返回一个记录
- 当一信号造成中断,而已经读了部分数据量时
函数sync、fsync和fdatasync
延时写:传统的UNIX系统实现在内核中设有缓冲区高速缓存或页高速缓存,大多数磁盘I/O都通过缓冲区进行。当我们向文件写入数据时,内核通常先将数据复制到缓冲区中,然后排入队列,晚些时间再写入磁盘
- sync只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束
- fsync函数只对由文件描述符fd指定的一个文件起作用,并且等待写磁盘操作结束才返回
- fdatasync函数类似于fsync,但它只影响文件的数据部分
函数fcntl
描述符 | 含义 |
---|---|
F_DUPFD | 复制文件描述符fd |
F_DUPFD_CLOEXEC | 复制文件描述符,设置与新描述符关联的FD_CLOEXEC文件描述符标志的值 |
F_GETFD | 对应于fd的文件描述符标志作为函数值返回 |
F_SETFD | 对应fd设置文件描述符标志 |
F_GETFL | 对应于fd的文件状态标志作为函数值返回 |
F_SETFL | 将文件状态标志设置为第三个参数的值 |
F_GETOWN | 获取当前接收SIGIO和SIGURG信号的进程ID或进程组ID |
F_SETOWN | 设置接收SIGIO和SIGURG信号的进程ID或进程组ID |
文件状态标志 | 说明 |
---|---|
O_RDONLY | 只读打开 |
O_WRONLY | 只写打开 |
O_RDWR | 读写打开 |
O_ACCMODE | 以上与操作 |
O_EXEC | 只执行打开 |
O_SEARCH | 只搜索打开目录 |
O_APPEND | 追加写 |
O_NONBLOCK | 非阻塞模式 |
O_SYNC | 等待写完成(数据和属性) |
O_DSYNC | 等待写完成(数据) |
O_RSYNC | 同步读写 |
O_FSYNC | 等待写完成 |
O_ASYNC | 异步IO |
函数ioctl
类别 | 常量名 | 头文件 | ioctl数 |
---|---|---|---|
盘标号 | DIOxxx | <sys/disklabel.h> | 4 |
文件I/O | FIOxxx | <sys/filio.h> | 14 |
磁带I/O | MTIOxxx | <sys/mtio.h> | 11 |
套接字I/O | SIOxxx | <sys/sockio.h> | 73 |
终端I/O | TIOxxx | <sys/ttycom.h> | 43 |