高级IO概念

介绍了一些高级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 进程结束,相关的锁都被释放
    1.2 关闭文件描述符,这个文件描述符指向的文件上与当前进程有关的锁都被释放
  2. fork的子进程不会继承父进程的锁
  3. 一个新程序在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技术指直接把磁盘文件对应到一块内存区域,对文件的读写操作直接变成了对
内存的读写操作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。