2018-2019-1 20165316 《信息安全系统设计基础》第六周学习总结

2018-2019-1 20165316 《信息安全系统设计基础》第六周学习总结

教材学习内容总结

10.1 Unix I/O

  • 一个Unix文件就是一个m个字节的序列。
  • 所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,所有的输入和输出都被当做对相应的文件的读和写来执行。
  • 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标示这个文件,应用程序只需记住这个描述符。
  • Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。头文件<unistd.h>定义了常量STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,可用来代替显式的描述符值。
  • 改变当前文件的文件位置。对于每个打开的文件,内核保持着一个文件位置k,初始为0.这个文件位置是从文件开头起始的字节偏移量。应用程序能够通过执行 seek 操作,显式地设置文件的当前位置为 k。
  • 读写文件:一个读操作就是从文件复制 n>0 个字节到内存,从当前位置 k 开始,然后将 k 增加到 k+n ;写操作就是从内存复制 n>0 个字节到一个文件,从当前位置 k 开始,然后更新 k。
  • 关闭文件:当应用完成了对文件的访问之后,它就通知内核关闭这个文件。作为响应,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。无论一个进程因为何种原因终止时,内核都会关闭所有打开的文件并释放它们的存储器资源。

10.2 文件

每个 Linux 文件都有一个类型(type)来表明它在系统中的角色。

  • 普通文件(regular file)包含任意数据。应用程序常常要区分文本文件(text file)和二进制文件(binary file)文本文件是只含有 ASCII 或 Unicode 字符的普通文件;二进制文件是所有除了文本文件的其他文件。对内核而言,文本文件和二进制文件没有区别。
  • 目录(directory)是包含一组链接(link)的文件,其中每个链接都将一个文件名(filename)映射到一个文件,这个文件可能是另一个目录。
  • 套接字(socket)是用来与另一个进程进行跨网络通信的文件。

10.3 打开和关闭文件

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

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_ WRONLY | O_APPEND,0)

读和写文件

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

  • read 函数从描述符为 fd 的当前文件位置复制最多 n 个字节到内存位置 buf。返回值 -1 表示一个错误,而返回值 0 表示 EOF。否则返回值表示的是实际传送的字节数量。
  • write 函数从内存位置 buf 复制至多 n 个字节到描述符 fd 的当前文件位置。

I/O重定向

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

unix > ls > foo.txt

使得 shell 加载和执行 ls 程序,将标准输入重定向到磁盘文件 foo.txt。I/O重定向一种工作方式是使用dup2函数:

#include <unistd.h>
int dup2(int oldfd,int new fd);
//返回:若成功则为非负的描述符,若出错则为-1

代码托管

上周考试错题总结

无错题

学习进度条

| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|
| -------- | :----------------😐:----------------😐:---------------: |:-----😐
| 目标 | 1000行 | 30篇 |400小时 | |
| 第一周 | 156/200 | 2/2 | 20/20 | |
| 第二周 | 121/200 | 2/2 | 18/30 | |
| 第三周 | 107/200 | 2/2 | 15/30
| 第四周 | 111/200 | 2/2 | 16/30
| 第五周 | 101/200 | 1/1 | 18/30
| 第六周 | 110/200 | 2/2 | 19/30

posted @ 2018-11-04 23:26  treebeard  阅读(100)  评论(0编辑  收藏  举报