2018-2019-1 20165210 《信息安全系统设计基础》第6周学习总结
教材学习内容总结(第十章)
Unix I/O
- 打开文件:打开文件操作完成以后才能对文件进行一系列的操作,打开完成过以后会返回一个文件描述符,它在后续对此文件的所有操作中标识这个文件,内核记录有关这个打开文件的所有信息。
- 打开文件的内核数据结构如下图:
- 打开文件的C中用的头文件及函数:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *name,int flags);
int open(const char *name,int flags,mode_t mode);
- 关闭文件:应用完成了对文件的访问之后,就通知内核关闭这个文件,内核释放文件打开时创建的数据结构,并将这个描述符恢复到可用的描述符池中。进程终止,内核也会关闭所有打开的文件并释放他们的存储器资源。
I/O重定向:
-
I/O重定向:在Unix系统中,每个进程都有STDIN、STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式。几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符,通过printf向终端输出字符。熟悉Shell的朋友都知道,我们可以方便地对Shell命令进行I/O重定向,比如
find -name "*.java" >testfile.txt
把当前目录下的Java文件列表重定向到testfile.txt。多数情况下,我们只需要了解I/O重定向的使用就够了,但是如果要编程实现类似Shell的I/O重定向以及管道功能,那么就需要清楚它的原理和实现。 -
对STDOUT重定向到testfile.txt前后内核文件描述符表变化的示意图:
重定向前:
重定向后: