IO分类
- 标准IO: fopen, fread, fwrite, fseek, fclose, ...
- 系统IO: open, read, write, readv, writev, pread, pwrite, close, fstat, fcntl, select,...
- 异步IO: aio_read, aio_write, lio_listio, aio_error, aio_return, ...
- 存储映射IO: mmap, munmap, madvise, ...
标准IO
-
实现最普遍: 各种平台上都有实现
-
读写是基于内部缓存的,适合于文本处理等每次操作小块数据的IO操作
-
效率较低。需要两次内存拷贝,一次是内核到标准IO的缓存,一次是标准IO的缓存到用户的缓存
-
在多线程或是并行情况下,使用起来很困难
系统IO
-
基于Linux/Unix操作系统,由POSIX所定义的通用文件和设备访问原语
-
效率较高,直接调用系统内核的功能
-
提供对文件和设备的直接访问,fstat, ioctl, fcntl,......
-
相对标准IO,编程的难度较大,需要对系统的底层有较为清晰的了解:文件描述符,文件表项,vnode, 阻塞/非阻塞, 读写锁, 多路复用,.....
-
支持并行和多线程:读写锁, pread, pwrite, preadv, pwritev,......