系统级I/O
- 输入输出是在主存和外部设备之间复制数据的过程。
- 输入是I/O设备复制数据到主存,输出是主存复制数据到I/O设备。
Unix I/O
- linux文件是m个字节的序列,所有的I/O设备都被模型为文件,而所有的输入和输出都被当作相应文件的读和写来执行。
- 打开文件。一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。
- Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。
- 改变当前文件的文件位置。对于每个打开的文件,内核保持着一个文件位置k,初始为0.这个文件位置是从文件开头起始的字节偏移量。
- 读写文件:一个读操作就是从文件拷贝n>0个字节到存储器。写操作就是从存储器拷贝n>0个字节到一个文件。
- 关闭文件:当应用完成了对文件的访问之后,它就通知内核关闭这个文件。作为响应,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。
文件
每一个linux文件都有一个类型来表示它在系统中的角色:
- 普通文件:包含任意数据,应用程序区分为文本文件和二进制文件。
- 目录:是包含一组链接的文件。
- 套接字:用来与另一个进程进行跨网络通信的文件。
打开或关闭文件
-
O_RDONLY:只读
-
O_WRONLY:只写
-
O_RDWR:可读可写
-
O_CREAT:如果文件不存在,就创建它的一个截断的(空)文件
-
O_TRUNC:如果文件已经存在,就截断它
-
O_APPEND:在每次写操作前,设置文件位置到文件的结尾处
读写文件
ssize_t read(int fd,void *buf,size_t n);
ssize_t write(int fd,const void *buf,size_t n);