- 2018-2019-1 20165206 《信息安全系统设计基础》第六周学习总结
- 教材学习内容总结
- 输入操作是从I/O设备复制数据到主存,输出操作是从主存复制数据到I/O设备。
- Unix I/O:
-
所有的I/O设备都被模型化为文件。
-
描述符在打开文件的后续对此文件的所有操作中标识这个文件。
-
每个进程开始时都有打开的三个文件:标准输入(描述符为0)、标准输出(描述符为1)和标准错误(描述符为2)。
-
读操作:一个读操作就是从文件复制n个字节到内存,从当前文件位置k开始,然后将k增加到k+n。
-
写操作:一个写操作就是从内存复制n个字节到一个文件,从当前文件位置k开始,然后更新k。
- 文本文件和二进制文件
- 打开文件:
int open(char *filename,int flags,mode_t mode)
- flags参数指明了进程打算如何访问这个文件:
O_RDONLY:只读;
O_WRONLY:只写;
O_RDWD:可读可写
注意O_RDONLY|O_WRONLY和O_RDWD不相同。
- mode参数指定了新文件的访问权限位。
文件夹权限0777表示用户、用户组的成员和其他人可读可写可执行。
7转化为二进制111,分别对应读、写、操作。
- 关闭文件
- int close(int fd)
若成功则为0,若出错则为-1.
关闭一个已关闭的描述符会出错。
- 读、写文件
- 应用程序是通过分别调用read和write函数来执行输入和输出的。
- ssize_t read(int fd,void *buf,size_t n);
- ssize_t write(int fd,const void *buf,size_t n);
-
size_t是无符号长整型,ssize_t是有符号长整型。
-
内核通过三个相关的数据结构来表示打开的文件:描述符表、文件表(file table)和v-node表。
-
dup2函数:
int dup2(int oldfd,int newfd)
dup2函数复制描述符表表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd以前的内容。
- 课上内容总结
- 帮助命令man:
-
man -k 函数名 搜索与此函数相关的信息
-
man -k 函数名 | grep key1| grep key2 带有筛选的搜索
-
man 2 函数名 可直接进入查看函数功能、所需头文件、返回值等相关信息的文件
-
grep -nr:grep -nr XXX /usr/include查宏定义,查找关键字,全文搜索
-
echo命令:用于创建一个二进制文件。
echo -ne "x6b" > test
x表示为16进制, NNN 表示八进制
也可以用另外一种写法:
echo 6b | xxd -r -ps > test
-
od命令:输出文件内容。查看二进制文件时,用od -x将其转成8进制或od -h将其转成16进制来看
-
head和tail命令:用来显示开头或结尾。
显示文件的前5行内容
head -n 5 example.c
显示文件除了头5行以外的所有内容
head -n -5 example.c
显示文件后5行的内容。
tail -n 5 example.c
- who命令:
who命令用于显示目前登录系统的用户信息。
c语言实现who命令的学习,我是参考博客:Linux下who命令之C语言实现进行学习的。
通过man who查看who了帮助文档,了解who命令的实现。
通过查看utmpx,了解/var/run/utmp是如何存储的
编程思想:
1、用open函数打开/var/run/utmp文件;
2、用while循环实现从头到尾读取文件;
3、用read函数读取并输出实现who命令的相关信息。
- 上周错题总结
- 错题1:
有关高速缓存的说法正确的是()
A .
高速缓存的容量可以用C=SEB 来计算
B .
高速缓存容量为2048,高速缓存结构为( 32 ,8,8,32)
C .
直接映射高速缓存要:组选择、行匹配、字抽取
D .
当程序访问大小为2的幂的数组时,直接映射高带缓存中常发生冲突不命中
- 答案: A C D