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

第十章 系统级I/O

 

Unix识别大量文件:普通文件(二进制或者文本);目录文件爱你(包含其他文件的信息);套接字(网络和其他进程通信)。
描述符表:每个进程独有,每个进程打开的文件描述符表指向文件表中的一个表项。
文件表:打开的文件集合,所有进程共享。
v-node表:进程共享,每次打开都有。
IO重定向:
> 右hoinky   <左hoinky
标准IO是磁盘和终端设备IO之选。

1.Unix I/O

 

所有的I/O设备,如网络、磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。这种将设备映射为文件的方式,允许UNIX内核引出一个简单、低级的应用接口,称为UNIX I/O。

 

10.2 打开和关闭文件

打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息。 

基本标志:O_RDONLY、O_WRONLY、O_RDWR,也可以和其他三种(O_CREAT、O_TRUNC、O_APPEND)组合使用。

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

关闭文件

应用完成了对文件的访问之后,就通知内核关

闭这个文件,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。进程终止,内核也会关闭所有打开的文件并释放他们的存储器资源。

10.3 读写文件

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

 

10.4 用rio包健壮地读写

 

RIO提供两类不同的函数:

无缓冲的输入输出函数

#include "csapp.h"

ssize_t rio_readn(int fd, void *usrbuf, size_t n);
ssize_t rio_writen(int fd,void *usrbuf, size_t n);
			/*返回:若成功则为传送的字节数,若EOF则为0(只对rio_readn而言),若出错则为-1*/

rio_readn函数

从描述符fd的当前位置最多传送n个字节到存储器位置usrbuf,在遇到EOF时只能返回一个不足值

rio_writen函数

从位置usrbuf传送n个字节到描述符fd。决不会返回不足值。

带缓冲的输入函数

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

#include "csapph.h"
void rio_readinitb(rio_t *rp,int fd)

ssize_t rio_readlined(rio_t,void *usrbuf,size_t maxlen)
ssize_t rio_readnb(rio_t *rp,void *usrbuf,size_t n)
			                         /*返回:若成功则为读的字节数,若为EOF则为0,若出错则为-1*/

10.5 读取文件元数据

 

 

文件的元数据

 

1.应用程序能够通过调用stat和fstat函数检索到关于文件的信息。

 

2.stat以一个文件名为输入,并且填充buf结构体。

 

3.fstat函数只不过是以文件描述符而不是文件名作为输入。

 

10.6 共享文件

 

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

 

10.7 I/O重定向

 

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

I/O重定向的工作方式: 一种是使用dup2函数。

 

10.8 标准I/O

 

posted on 2015-11-08 18:44  20135230潘俊洋  阅读(291)  评论(0编辑  收藏  举报