(全)2017-10-11 第三次 信息安全系统设计基础课 主要内容

第二次课考试来着,所以就没写,第三次课课上讲了些知识,所以就整理一下。

预览可能字比较小不方便看,可以点击进来看。

本次课老师讲的是第十章,系统调用,一共讲了三方面的内容:who命令系统调用一些小技巧

学习linux主要是学习三个方面:
1.学习linux命令,
2.学习系统调用,
3.学习具体命令,如od,是怎么实现的(先用伪代码,用汉语把问题解决,然后再用c语言写产品代码)

知识分三类,有元知识,软知识,硬知识,元知识学会了就能举一反三,软知识就是用量、用实践来做就能掌握,硬知识就是背下来就好了,

接下来是第一个内容:who命令

who命令的功能是给出用户信息,因为linux是个多用户操作系统,会给出当前的用户的登录信息。

如果没用过who怎么办呢?就用man who命令,可以查看帮助文档,


(紧接着老师又举了一个别的例子,来讲述为什么左上角的WHO旁边有个(1))

给大家举个例子,printf,但是man printf是查找printf的帮助文档吗?
其实不是了,man 3 printf才是printf的帮助文档,man 1 printf不是,

最终得出规律:找c语言函数——man 3,找系统调用——man 2,找终端命令行——man 1

(好了,例子举完了)

who -a就可以把多个用户的登录信息显示出来了。who的内容有三列,用户名、终端、登录时间

接下来的任务就是用编程实现who,(我们要通过utmp来编程实现who)直接看一下who的帮助文档,输入man who


然后老师说了,看帮助文档时一定要注意看SEE ALSO这里,SEE ALSO与系统调用有关。

看下面这张图有个utmp

这个utmp文件保存的就是当前用户的登录信息,我们试着用vi查看一下utmp里面的信息,



发现都是一堆乱码对吧,utmp是二进制文件,怎么看呢?用我们上节课学过的od -tc -tx1 utmp就可以了,

man utmp查看帮助文档,发现utmp是一个系统文件,因为utmp旁边的数字是5,


我们可以得知utmp是一个结构体,包含ut_line和ut_user等项目,

因此我们得到了用c编程实现who的方法:
1.打开utmp,
2.循环打印用户名、时间、终端等,
3.关闭utmp。

接下来是第二个内容:使用系统调用!

我们有什么不懂的,都会去百度上搜一下,现在什么函数不懂,可以输入man -k xxx,比如我们搜索man -k read,搜索read头文件,
可以发现出现了很多很多不需要的文件,所以我们可以输入man -k read | grep 2做一个筛选,



其实还可以再精确一下,输入man -k read | grep 2 | grep read,结果所有含有read的都显示出来了,

终于找到了read,并且得出结论:我们只需要知道自己要干什么就行了,有不会的函数就去用man和grep搜索,

再用man 2 read看一下帮助文档,要格外注意的是这里:


SYNOPSIS(大纲、摘要)内容包含这个read函数使用时,所必须的头文件

还有的SYNOPSIS文件里包涵其他内容,可能还有链接库,比如求正弦的函数:sin,这时就得把他的链接库也一并写上,
否则就不能使用,


(好了举完了sin的例子,我们再回来看man read帮助文档)

再看SEE ALSO这里,有个open,open是和文件最相关的一个命令了,


我们打开帮助文档:man open,可以看到了有三个头文件,所以都要调用。

(以后比如毕设时问你头文件哪里来的,一定要会说!)

所有的代码都放在一个main函数里不是一个好的习惯,要学会分模块,要会函数分离,有利于提高代码质量。

接下来是第三个问题——一些小技巧,比如:读代码时遇到宏,读不懂怎么办?

c语言中经常用到stdio.h,linux下使用locate stdio.h就可以查到stdio.h的位置了,

还有一个小技巧:grep -nr,其中r是递归调用,这个指令可以将搜到的东西打印在第n行,

搞破坏之前要先备份一下,用cp who1.c who1back.c可以实现备份。
copy命令怎么用c语言实现呢?
1.打开fd1,
2.创建fd2,循环:从fd1读取100个字节,并写到fd2里,
3.关闭fd1,fd2.
提问:从fd1里读了100个字节,fd2里就有100个字节吗?
回答:不是的,fd1里的字节数多于100个的话,只读100个,如果不够100个比如三十个, 就只会读三十个。

所有的知识都讲完了,接下来是课堂测验!

MR.LOU:“我讲了两个例子了,接下来该你们了。”

原文地址:https://www.cnblogs.com/zhuanyedajiesanshinian/p/7654661.html