信息安全系统设计基础第十二周学习总结
估算学习时间:共10小时
读书:0
代码:8
作业:0
博客:2
实际学习时间:共8.5小时
读书:0
代码:7
作业:0
博客:2
耗时估计的公式:Y=X+X/N ,Y=X-X/N
process代码
exec1
- 把arglist中的参数传给ls命令,所以程序相当于命令 ls -l,即以长格式的形式查看当前目录下所有可见文件的详细属性。
- 程序代码和运行结果如下:
exec2
- 同exec1
- 程序代码和运行结果如下:
exec3
- execlp()函数属于exec()函数族(exec()族函数用一个新的进程映像替换当前进程映像)它是execve(2)函数的前端。
- execlp(从PATH 环境变量中查找文件并执行)。execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
- 如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。
- 如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了。所以最后一句并未出现。
- 程序代码和运行结果如下:
forkdemo1
- 这个代码先是打印进程pid,然后调用fork函数生成子进程,休眠一秒后再次打印进程id,这时父进程打印子进程pid,子进程返回0。
- 程序代码和运行结果如下:
forkdemo2
- 这个代码也是打印进程pid,然后调用fork函数生成子进程,因为调用两次fork,一共产生四个子进程,所以会打印四个aftre输出。
- 程序代码和运行结果如下:
forkdemo3
- fork产生子进程,父进程返回子进程pid,不为0,所以输出I am the parent,my child is 3159;子进程返回0,所以会输出I am the child,my child is 3140。
- 程序代码和运行结果如下:
forkdemo4
- 程序先打印进程pid,然后fork创建子进程,父进程返回子进程pid,所以输出I am the parent,my child is 3159,休眠十秒;子进程返回0,所以输出I am the child,my child is 3140和parent pid=3158,my pid =3159。
- 程序代码和运行结果如下:
forkgdb
- 父进程打印是先打印两句,然后休眠一秒,然后打印一句,子进程先打印一句,然后休眠一秒,然后打印两句。并且这两个线程是并发的,所以可以看到在一个线程休眠的那一秒,另一个线程在执行,并且线程之间相互独立互不干扰。
- 程序代码和运行结果如下:
psh1
- 这个代码就相当于你输入要执行的指令,回车表示输入结束,然后输入的每个参数对应到函数中,再调用对应的指令。
- 程序代码和运行结果如下:
psh2
- 加入循环判断,不退出的话就会一直要你输入指令,并且对于子程序存在的状态条件。
- 程序代码和运行结果如下:
testbuf1
- 程序输出hello,无法退出。
- 程序代码和运行结果如下:
testbuf2
- 程序输出hello,无法退出。
- 程序代码和运行结果如下:
testbuf3
- 将内容格式化输出到标准错误、输出流中。
- 程序代码和运行结果如下:
testpid
- 输出当前进程pid和当前进程的父进程的pid。
- 程序代码和运行结果如下:
testpp
- 程序代码和运行结果如下:
testsystem
- 同时输出两条指令的结果。
- 程序代码和运行结果如下:
waitdemo1
- 如果有子进程,则终止子进程,成功返回子进程pid。
- 程序代码和运行结果如下:
waitdemo2
- 如果有子进程,则终止子进程,成功返回子进程pid。并且多了一个子进程的状态区分,把状态拆分成exit,sig和core。
- 程序代码和运行结果如下:
argv文件夹
argtest
- execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
- 程序代码和运行结果如下:
freemakeargv
- 程序代码如下:
makeargv
- 程序代码如下:
env文件夹
environ
- 程序代码和运行结果如下:
environvar
- 程序代码和运行结果如下:
fifo文件夹
consumer
- 程序代码和运行结果如下:
producer
- 程序代码和运行结果如下:
testmf
- 程序代码和运行结果如下:
pipe文件夹
listargs
- 程序代码和运行结果如下:
pipe
- 程序代码和运行结果如下:
pipedemo
- 程序代码和运行结果如下:
pipedemo2
- 程序代码和运行结果如下:
stdinredir1
- 程序代码和运行结果如下:
stdinredir2
- 程序代码和运行结果如下:
testtty
- 程序代码和运行结果如下:
whotofile
- 程序代码和运行结果如下:
signal文件夹
sigactdemo
- 程序代码和运行结果如下:
sigactdemo2
- 程序代码和运行结果如下:
sigdemo1
- 程序代码和运行结果如下:
sigdemo2
- 程序代码和运行结果如下:
sigdemo3
- 程序代码和运行结果如下:
遇到的问题
- 无法运行代码argtest.c
- 解决方法:
- 段错误
参考资料
- 教材:第八章,详细学习指导:http://group.cnblogs.com/topic/73069.html
- 课程资料:https://www.shiyanlou.com/courses/413 实验十,课程邀请码:W7FQKW4Y
- 教材中代码运行、思考一下,读代码的学习方法:http://www.cnblogs.com/rocedu/p/4837092.html。
- 闫佳歆同学的博客:http://www.cnblogs.com/20135202yjx/p/5003653.html