2018-2019-1 20165221 《信息安全系统设计》第六周学习总结
知识点总结
理论知识
- 操作系统完成的「硬件相关、应用无关」的工作比喻成两个角色:
管家婆
服务生
操作系统通过三抽象概念完成了「管家婆」的功能:
header 1 | header 2 ---|--- 抽象一| 通过「文件」对I/O设备进行了抽象 抽象二| 通过「虚存」对主存和I/O设备进行了抽象 抽象三| 通过「进程」对CPU、主存和I/O设备进行了抽象
who命令如何使用
- 可以查看当前登录的账户,终端和近期的登陆时间
- 键入
man 1 who
可以具体查看该命令的用法
who
命令的其他几种形式:header 1 | header 2 ---|--- 形式1 | ```whoami``` 形式2| ```who am i``` 形式3| ```who mom likes```
- who的帮助文档提供了重要的信息:
If FILE is no specified, use /var/run/utmp,/var/log/wtmp as FILE is common.
- 下面进行具体查看和捕捉
由此证实关于utmp
是一条记录,一条记录组成的文件的猜想。 找到实现
who
命令的代码:
如何自己编写
who
命令- 具体代码:
#include <stdio.h>
#include <stdlib.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
int show_info( struct utmp *utbufp )
{
printf("%-8.8s", utbufp->ut_name);
printf(" ");
printf("%-8.8s", utbufp->ut_line);
printf(" ");
printf("%10ld", utbufp->ut_time);
printf("\n");
return 0;
}
int main()
{
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
//打开utmp 文件
if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
perror( UTMP_FILE );
exit(1);
}
//读取utmp中的每一条记录
while ( read(utmpfd, ¤t_record, reclen) == reclen )
//显示记录中的相关信息
show_info(¤t_record);
//关闭utmp文件
close(utmpfd);
return 0;
}
学习linux系统编程的方法
- 仔细研究
manpages
- 问题驱动,使用
man -k key1|grep key2|...
在manpages中搜索你要的内容 - 阅读.h文件: 可以通过
grep -nr XXXX /usr/incldue
查找相关的宏定义,结构体定义,类型定义等 解决一个问题要多个系统调用,可以参考
manpages
的SEE ALSO
部分来得到相关系统调用的信息文本文件易读取,占位置;二进制文件灵活易存储,读取难
参考资料
- 别出心裁的Linux系统调用学习法
- 文本文件与二进制文件区别