信息安全系统设计基础第9周学习总结

时间:2015-11-08 16:28:11   收藏:0   阅读:235

第十章 系统级I/O

10.1  UNIX  I/O

1:系统级I/O

     什么是UNIX I/O?

    所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,

    允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O。

2:输入输出I/O是在主存和外部设备(如磁盘,网络和终端)之间拷贝数据的过程。

 

     输入就是从I/O设备拷贝数据到主存,而输出就是从主存拷贝数据到I/O设备。

3:打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的

     所有操作中标识这个文件。内核记录有关这个打开文件的所有信息,头文件可用来代替显式的描述符。

     UNIX外壳创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。

4:改变当前的文件位置:对于每个打开的文件,内核保持着一个文件位置k,初始为0。这个文件位置是从文件开头起始的字节偏移量。

     应用程序能够通过执行seek操作,显式地设置文件的当前位置为k。

 

3:读写文件:一个读操作就是从文件拷贝N个字节到存储器;给定一个大小为m字节的文件,当k大于等于m是会触发一个称为(EOF)的条件。

     写操作就是从存储器拷贝n个字节到一个文件。

4:关闭文件,内核释放文件打开是创建的数据结构,并恢复描述符到描述符池中。

10.2 打开和关闭文件 

  1. 进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件。

  2. flags参数表示进程打算如何访问这个文件,它的值包括:O_RDONLY
    O_WRONLY
    O_RDWR

  3. flags参数也可以是一个或者更多位掩码的或,提供一些额外的指示:

    O_CREAT
    O_TRUNC:如果文件已经存在,就截断它。
    O_APPEND

10.3 读和写文件 598

应用程序是通过分别调用系统函数 read和write函数来执行输入和输出的。
技术分享

旁注:size_t是作为usigned int,而ssize_t是作为int。

在某些情况下,read和write传送的字节比应用程序要求的要少。出现这种情况的可能的原因有:

读时遇到EOF。假设该文件从当前文件位置开始只含有20个字节,而应用程序要求我们以50个字节的片进行读取,这样一来,这个read的返回的值是20,在此之后的read则返回0。
从终端读文本行。如果打开的文件是与终端相关联的,那么每个read函数将一次传送一个文本行,返回的不足值等于文本行的大小。
读和写socket。如果打开的文件对应于网络套接字,那么内部缓冲约束和较长的网络延迟会导致read和write返回不足值。

10.4 用rio包健壮地读写 599

RIO提供了两类不同的函数:

无缓冲的输入输出函数
带缓冲的输入函数

10.4.1 rio的无缓冲的输入输出函数 600

10.4.2 rio的带缓冲的输入函数 600

10.5 读取文件元数据 604

10.6 共享文件 606

内核用三个相关数据结构来表示打开的文件

描述符表
文件表
v-node表

10.7 i/o重定向 608

10.8 标准i/o 609

10.10 小结 611

原文:http://www.cnblogs.com/ShadowStealer/p/4947525.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!