介绍了一些高级IO函数的概念
非阻塞I/O
系统调用分成两部分:慢的和其他的。慢的系统调用可以永远阻塞。
非阻塞I/O允许我们调用一个I/O操作,但不会被这个I/O操作永远阻塞,如果I/O操作无法立
刻完成,那么也会立即返回,返回值是一个特定错误,说明I/O操作被阻塞
Record Locking
Record Locking
提供的功能是:一个文件的一部分或者全部只能被持有Recording Locking
锁的进程访问。通过一下函数调用获取或者释放锁
#include <fcntl.h>
int fcntl(int fd, int cmd, ... /* struct flock *flockptr */ );
struct flock {
short l_type;
short l_whence;
off_t l_start;
off_t l_len;
pid_t l_pid;
};
锁的继承和释放规则
- 锁是和进程和文件有关的。
1.1 进程结束,相关的锁都被释放
1.2 关闭文件描述符,这个文件描述符指向的文件上与当前进程有关的锁都被释放 - fork的子进程不会继承父进程的锁
- 一个新程序在
exec
执行期间,锁可以被继承的
I/O Multiplexing
I/O Multiplexing技术用于,我们需要同时处理多个I/O读写事件,典型的比如一个服务端
进程为多个客户端提供服务。我们告诉操作系统需要监听的多个文件描述符,然后调用一个
函数,函数一直阻塞,直到至少有一个文件描述符可以进行I/O读写。
异步I/O
当我们需要处理多个I/O读写事件时,也可以通过异步I/O方式实现。我们向操作系统提交多
个I/O请求,当操作系统完成请求后,通过信号的方式通知我们。
通常异步I/O代码结构比较复杂
Memory-Mapped I/O
内存映射I/O技术指直接把磁盘文件对应到一块内存区域,对文件的读写操作直接变成了对
内存的读写操作