#2017-2018-1 20155331 《信息安全系统设计基础》第四周学习总结
2017-2018-1 20155331 《信息安全系统设计基础》第四周学习总结
课堂测试补交
myod-系统调用版本
参考教材第十章内容
用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能,注意XXX是文件名,通过命令行传入,不要让用户输入文件名
-
不要把代码都写入main函数中
-
要分模块,不要把代码都写入一个.c中
码云链接:https://gitee.com/dd1174751354/XXAQXTSJ/tree/master/myod2
学习教材第十章内容
系统级I/O
输入/输出(I/O)是在主存和外部设备(如磁盘驱动器、终端和网络)之间拷贝数据的过程。输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备。
10.1 Unix I/O
一个Unix文件就是一个m字节的序列:
B0,B1,...Bk,...,B(m-1)
所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,而所有的输入和输出都将被当做对应文件的读和写来执行。这种将设备优雅地映射为文件的方式,允许Unix内核引出一个简单、低级的应用接口,称为Unix I/O,这使得所有的输入和输出都能以一种统一而且一致的方式来执行:
打开文件:
一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备。
Unix外壳创建的每个进程开始时都有三个打开的文件:
标准输入、标准输出、标准错误
改变当前的文件的位置:
对于每个打开的文件,内核保持着一个文件位置K,初始为0
读写文件:
一个读操作就是从文件拷贝n>0个字节到存储器,从当前文件位置K开始,然后将k增加到k+n.
关闭文件:
当应用完成了对文件的访问之后,它就通知内核关闭这个文件。
10.2 打开和关闭文件
进程是通过调用open函数来打开一个已存在的文件或者创建一个新文件的:
open函数将filename转换为一个文件描述符,并且返回描述符数字。返回的描述符总是在进程中当前没有打开的最小描述符。
10.3读和写文件
应用程序是通过分别调用read和write函数来执行输入和输出的。
read 从描述符位为fd的当前文件位置拷贝最多n个字节到存储位置buf。返回值-1表示一个错误,而返回值0表示EOF。
否则,返回值表示的是实际传送的字节数量。
write函数从存储位置buf拷贝至多n个字节到描述符fd的当前文件的位置。
通过调用lseek函数,应用程序能够显示地修改当前文件的位置。
10.4用RIO包健壮地读写
RIO包提供了方便、健壮和高效的I/O。RIO提供了两类不同的函数:
无缓冲的输入输出函数:
这些函数直接在存储器和文件之间传送数据,没有应用级缓存。
它们对将二进制数据读写写到网络和从网络读写二进制数据尤其有用。
带缓冲的输入函数:
这些函数允许你高效地从文件中读取文本行和二进制数据,这些文件的内容缓存在应用缓冲区内,类似于为像printf这样的标准I/O函数提供的缓冲区。
10.5读取文件元数据
应用程序能够通过调用stat和fstat函数,检索到有关文件的信息。
stat函数以一个文件名作为输入。fsata函数是相似的,只不过是以文件描述符而不是文件名作为输入。
10.6共享文件
可以用许多不同的一个方式来共享Unix文件。除非你跟清楚内核是如何表示打开的文件,否则文件共享的概念相当难懂。内核用三个相关的数据结构来表示打开的文件:
描述符表:
每个进程都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的。每个打开的描述符表项指向文件表中的一个表项。
文件表:
打开文件的集合是由一张文件表来表示的、所有的进程共享这张表。
教材中遇到的问题和解决过程
问题: ssize_t和size_t有些什么区别?
回答:上网查得,ssize_t:ssize_t:这个数据类型用来表示可以被执行读写操作的数据块的大小。它表示的是signed size_t类型的。
上周考试错题总结
无
结对及互评
点评模板:
博客中值得学习的或问题:
xxx
xxx
...
代码中值得学习的或问题:
xxx
xxx
...
其他(感悟、思考等,可选)
这周的学习还是感觉挺吃力的,很多问题都是在别人的帮助下完成的,不过确实感觉自己有学到一些东西,所以以后自己会更加努力的。