信息安全系统设计基础第十二周学习总结

信息安全系统设计基础第十二周学习总结

估算学习时间:共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

  • 程序代码和运行结果如下:


遇到的问题

  1. 无法运行代码argtest.c
  • 解决方法:
  1. 段错误

参考资料

  1. 教材:第八章,详细学习指导:http://group.cnblogs.com/topic/73069.html
  2. 课程资料:https://www.shiyanlou.com/courses/413 实验十,课程邀请码:W7FQKW4Y
  3. 教材中代码运行、思考一下,读代码的学习方法:http://www.cnblogs.com/rocedu/p/4837092.html。
  4. 闫佳歆同学的博客:http://www.cnblogs.com/20135202yjx/p/5003653.html
posted @ 2015-11-29 01:39  xixixixixi  阅读(403)  评论(0编辑  收藏  举报