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

Unix I/O

使得所有的输入和输出都能以一种统一且一致的方式来执行;

1.打开文件 : 标准输入(描述符为0)、标准输出(描述符为1)、标准错误(描述符为2); 2.改变当前的文件位置; 3.读写文件

打开和关闭文件

open函数将filename转换为一个文件描述符,并且返回描述符数字(返回的文件描述符总是在进程中当前没有打开的最小描述符)。

int open(char * filename, int flags, mode_t mode)

flags参数:

  1. - O_RDONLY:只读
  2. - O_WRONLY:只写
  3. - O_RDWR:可读可写

mode参数定义文件的访问权限位

读和写文件

read (int fd, void *buf, size_t n)(返回:若成功,则为读的字节数,若EOF则为0,若出错则为-1)

write(int fd, const void *buf, size_t n)(返回:若成功则为写的字节数,若出错则为-1)

用RIO包健壮的读写

无缓冲的输入输出函数

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

带缓冲的输入输出函数

rio_readinitb(rio_t *rp, int fd)
返回:无
rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen);
rio_readnb(rio_t *rp, void *usrtuf, size_t n);  
返回:若成功则为读的字节数,若EOF则为0,若出错则为-1.

RIO读程序的核心是rio_read函数。

读取文件元数据

应用程序通过调用stat和fstat函数,检索到关于文件的信息(元数据)。

int stat(const char *fliename, struct stat *buf);
int fstat(int fd, struct stat *buf);
返回:若成功则为0.若出错则为-1

共享文件

描述符表、文件表、V-node表

I/O重定向

方法一:使用dup2函数 dup2函数拷贝了描述符表表项oldfd到描述符表项newfd,覆盖描述符表项newfd的内容。若果newfd已经打开了,dup2会拷贝oldfd之前关闭newfd.

标准的I/O

标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构指针,。stdin\stdout\stdeer分别对应标准输入、标准输出、标准错误。

extern FLIE *stdin
extern FILE *stdout
extern FILE *stderr

类型为FILE的流是对文件描述符和流缓冲区的抽象。

我的问题:

1.PS:作业题中有一个返回未打开的最小描述符为什么是3?

2.对dup2函数的工作原理不理解。

资料参考来自:《深入理解计算机系统》

posted @ 2015-11-08 10:13  20135311不是富东京  阅读(156)  评论(1编辑  收藏  举报