标签:
输入/输出(I/O)
输入输出是在主存和外部设备之间拷贝数据的过程。
输入操作是从I/O设备拷贝数据到主存。
输出操作是从I/O主存拷贝数据到I/O设备。
与语言相关:
在UNIX系统中,是通过由内核提供的系统级I/O函数来实现这些较高级别的I/O函数的。
有时候你除了使用Unix I/O之外别无选择。在某些重要的情况下,使用高级别I/O函数不太可能或不太适合。例如标准I/O库没有提供读取文件元数据的方式,如文件大小或文件创建时间。另外,标准I/O库还存在一些问题,使得用它来进行网络编程非常危险。(比如哪一些?)
Unix I/O
所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,而所有的输入输出都被当作相对应文件的读和写来执行。这种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单、低级的应用接口,称为Unix I/O。
同时这也使得输入输出都能以一种统一且一致的方式来执行:
描述符:内核返回一个小的非负整数。
内核纪录有关这个打开文件的所有信息。应用程序只需要记住这个描述符。
Unix 外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2)。
seek操作:对于每个打开的文件内核把持着一个文件位置k,初始值为0.应用程序能够通过执行seek操作显示地设置文件的当前位置为k。
end-of-file(EOF)条件:值得注意的是文件结尾处并没有明确的EOF符号。
读操作就是从文件拷贝n>0个字节到存储器,从文件当前位置开始,然后将k增加到k+n。给定当k大于或等于m时执行读操作会出发一个 EOF的条件。
作为关闭文件的响应,内核释放文件打开时创建的数据结构。并将这个描述符恢复到可用的描述符池中。
不足值 short count
在某些情况下,read和write传送的字节比应用程序要求的要少,这些不足值不表示有错误。
想创建健壮可靠的注入web服务器这样的网络应用,就必须通过反复调用read和write处理不足值,直到所有需要的字节都传输完毕。
待补充的主题:
rio无缓冲/带缓冲的输入输出函数
读取元数据
共享文件
I/O重定向
标签:
原文地址:http://www.cnblogs.com/dotdog/p/4559678.html