码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-09 01:39:55      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

第十章.系统级I/O

10.1 Unix I/O

一个Unix文件就是一个m个字节的序列,所有的I/O设备,都被模型化为文件,而所有的输入和输出都被当作对应文件的读和写来执行。
这种简单优雅的方式叫做UnixI/O。
①打开文件 描述符:0,标准输入
     1,标准输出
     2,标准错误

②改变当前文件位置 初始为0,通过seek操作改变为K

③读写文件 从文件拷贝到存储器叫读;从存储器拷贝到文件叫写;end-of-file(EOF)。对于每个打开的文件,内核保持着一个文件位置k,初始为0。这个文件位置是从文件开头起始的字节偏移量。通过执行seek操作设置文件位置为k。

④关闭文件:内核释放文件打开时创建的数据结构。

10.2 打开和关闭文件

打开:调用open函数来执行
 open函数将filename转换为一个描述符,并且返回描述符数字;
 flags参数也可以是一个或者更多位掩码;
 mode参数指定了新文件的访问权位。
关闭:通过close函数的调用关闭一个打开的文件。

例如:打开:int open(char *filename,int flags,mode_t mode) (若成功则返回新文件描述符,若出错为-1)

        关闭:int close(int fd)(若成功则为0,若出错则为-1)

10.3 读和写文件

读文件:read函数从描述符为fd的当前文件位置拷贝最多n个字节到存储器位置buf。返回值表示实际传送的字节数量,错误返回-1,EOF返回0。

写文件:write函数从存储器位置buf拷贝至多n个字节到描述符fd的当前文件位置。

10.4 用rio包健壮地读写

  通过调用rio _ readnrio _ writen函数,应用程序可以在存储器和文件之间直接传送数
据。

打开每一个描述符都会调用一次rio _ readinitb函数,他将描述符fd和地址rp处的一个类型为rio _ t的读缓冲区联系起来。

带缓冲的函数的调用不应该和无缓冲的rio _ readn交叉使用。

10.5读取文件元数据

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

       #include <unistd.h>

      #include <sys/stat.h>

      int stat(const char *filename,struct stat *buf);

      int fstat(int fd,struct stat *buf);

      返回:若成功则为0,若出错则为-1.

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

 

10.6 共享文件

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

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

     文件表:所有进程共享,表项组成包括当前文件位置、引用计数、一个指向v-node表中对应表项的指针。引用计数为0时,内核会删除这个文件表表项。

     v-node表:每个表项包含stat结构中的大多数信息,;包括st_mode和st_size成员,所有进程共享。

10.7 重定向

I/O重定向:使用dup2函数:

     #include <unistd.h>

     int dup2(int oidfd,int newfd);

     返回:若成功则为非负的描述符,若出错则为-1

 

10.8 标准I/O

标准I/O库(libc):高级输入输出函数

    #include <stdio.h>

    extern FILE *stdin; /*标准输入,文件描述符为0*/

    extern FILE *stdout; /*标准输出,文件描述符为1*/

    extern FILE *stderr; /*标准错误,文件描述符为2*/

标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构指针。

 

参考资料来自闫佳歆同学

 

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

标签:

原文地址:http://www.cnblogs.com/20135335hs/p/4948825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!