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

第十章 系统级I/O数据结构

-------------------------------------------------------------------------------------------------------------------------------------函数

I/Ospa

一个Unix文件就是一个m个字节的序列:B0,B1,.......,Bk,......,Bm-1操作系统

打开文件:一个应用程序经过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。视频

      内核返回一个小的非负整数,叫作描述符,它在后继对此文件的全部操做中标识这个文件。内核记录有关这个打开文件的全部信息。应用程序只需记住这个标识符。索引

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

改变当前的文件位置:对于每一个打开的文件,内核保持着一个文件位置k,初始为0。资源

          这个文件位置是从文件开头起始的字节偏移量。应用程序可以经过执行seek操做,显示地设置文件的当前位置为k。字符串

读写文件:一个读操做就是从文件拷贝n>0个字节到存储器,从当前文件位置k开始,而后将k增长到k+n。get

      给定一个大小为m字节的文件,当k》m时执行读操做会触发一个称为end-of-file(EOF)的条件,应用程序能检测到这个条件。在文件的结尾处并无明确的“EOF符号”。

      相似地写操做就是从存储器拷贝n>0个字节到一个文件,从当前文件位置k开始,而后更新k。

关闭文件:当应用完成了对文件的访问以后,它就通知内核关闭这个文件。做为响应,内核释放文件打开时建立的数据结构,并将这个描述符恢复到可用的描述符池中。

      不管一个进程由于何种缘由终止时,内核都会关闭全部打开的文件并释放他们的存储器资源。

打开关闭文件

open函数:打开一个已存在的文件或者建立一个新文件

      此函数将filename转换为一个文件描述符,而且返回描述符数字。返回的描述符老是在进程中当前没有打开的最小描述符。flags参数指明了进程打算如何访问这个文件。

      O_RDONLY只读

      O_WRONLY只写

      O_RDWR可读可写

      书中例子:fd = Open("foo.txt",O_RDONLY, 0)

flags参数也能够是一个或者更多位掩码的或,为写提供给一些额外的指示:

      O_CREAT若是文件不存在,就建立它的一个截断的(空)文件

      O_TRUNC若是文件已经存在,就截断它

      O_APPEND在每次写操做前,设置文件位置到文件的结尾处。

      书中例子:fd = Open("foo.txt",O_WDONLY|O_APPEND, 0)

mode参数指定了新文件的访问权限位。

读写文件文件

调用read和write函数进行输入和输出的。

经过调用lseek函数,应用程序可以显示地修改当前文件的位置,这部份内容不在咱们的讨论范围以内。

用RIO包健壮地读写

一、无缓冲的输入输出函数

调用rio_readn和rio_writen函数,应用程序能够在存储器和文件之间直接传送数据。

二、带缓冲的输入函数

一个文本行就是一个由换行符结尾的ASCLL码字符序列。

调用一个包装函数,他从一个内部读缓冲区拷贝一个文本行,当缓冲区边空时,会自动地调用read从新填满缓冲区。

读取文件元数据

调用stat和fstat函数,检索到关于文件的信息(也称为文件的元数据)

stat函数以一个文件名做为输入,并填写其数据结构中的各个成员。

fstat函数是类似的,只不过是以文件描述符而不是文件名做为输入。

共享文件

描述符表:每一个进程都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的。每一个打开的描述符表项指向文件表中的一个表项。

文件表:打开文件的集合是由一张文件表来表示的,全部进程共享这张表.

V-NODE表:同文件表同样,全部的进程共享这张V-NODE表。每一个表项包含stat结构中的大多数信息。

I/O重定向

Unix外壳提供了I/O重定向操做符,容许用户将磁盘文件和标准输入输出联系起来。

dup2函数:拷贝描述符表表项oidfd到描述符表表项newfd,覆盖描述符表表项newfd之前的内容。若是newfd已经打开了,dup2会在拷贝oldfd以前关闭newfd。

标准I/O

ANSI c定义了一组高级的输入输出函数 称为I/O库

提供了打开和关闭函数:fopen和oclose

   读和写字节的函数:fread和fwrite

   读和写字符串:fgets和fputs

   复杂的格式化的I/O函数:scanf和printf

 --------------------------------------------------------------

参考资料:

深刻理解计算机操做系统

视频

相关文章
相关标签/搜索