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

第十二周(11.23-11.29):学习计时:共6小时

  • 指针数组

    是数组,数组里的元素是指针

    int *daytab[13]

    数组指针

    是指针,指向一个类型和元素个数都固定的数组

    int (*daytab1)[13]

    指针函数

    是函数,返回值类型是指针

    int *comp()

    函数指针

    是指针,指向函数的指针,函数名就是函数指针

    int (*comp1)()

    右左右左法

    每次分析不要跨过括号,位于右边的小括号和中括号具有更高的优先级。

    1.数组一定要告诉元素个数和数据类型
    2.函数一定有形参和返回值类型
    3.数组指针,函数指针,*和指针要括起来。
    分析:

  • char ((x())[])()
    简化:
  • typedef char (f)();
    typedef f g[];
    x可以简化为g 
    x(),所以x是一个返回值指向g类型的指针的函数。

g是一个指针数组,数组内的元素都是指针,指针的类型是一个返回值为char的函数指针。

  1. char ((x[3])())[5]
简化为char (*A)[5],这是一个数组指针,指向一个有五个char型元素的数组
A是(*x[3])(),相当于(*B)(),这是一个函数指针,指向函数B
B是x[3],是一个数组。
 
 
 

exec1

execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。

如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。

exec2

它与exec1的区别就在于exevp函数的第一个参数,exec1传的是ls,exec2直接用的arglist[0],不过由定义可得这两个等价,所以运行结果是相同的。

exec3

这个代码指定了环境变量,然后依然执行了ls -l指令,成功后没有返回,所以最后一句话不会输出。运行结果同exec1.

 


 

exec1

 

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

 

exec2

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

 

exec3

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

 


 

forkdemo1    

这个代码先是打印进程pid,然后调用fork函数生成子进程,休眠一秒后再次打印进程id,这时父进程打印子进程pid,子进程返回0.

forkdemo2  

这个代码调用两次fork,一共产生四个子进程,所以会打印四个aftre输出。

forkdemo3  

fork产生子进程,父进程返回子进程pid,不为0,所以输出父进程的那句话,子进程返回0,所以会输出子进程那句话。

 


 


forkdemo1
     forkdemo2     forkdemo3

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


 

forkdemo4

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

 


forkgdb 父进程打印是先打印两句,然后休眠一秒,然后打印一句,子进程先打印一句,然后休眠一秒,然后打印两句。并且这两个线程是并发的,所以可以看到在一个线程休眠的那一秒,另一个线程在执行,并且线程之间相互独立互不干扰。

 


 

 

forkgdb

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


 

psh1                                                                                             psh2

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

 


 
 testbuf1

效果是先输出hello,然后换行。之后不退出。

 testbuf2

效果同上。

 testbuf3 将内容格式化输出到标准错误、输出流中。


 

testbuf  :     testbuf1       testbuf2         testbuf3

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


testpid

输出当前进程pid和当前进程的父进程的pid。

testpp   
testsystem system()——执行shell命令,也就是向dos发送一条指令。这里是后面可以跟两个参数,然后向dos发送这两个命令,分别执行。如下图,输入ls和dir两个指令后,可以看到分别执行了。

 


 

testpid   testpp   testsystem

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

 


 

waitdemo1

如果有子进程,则终止子进程,成功返回子进程pid。结果如下图:

waitdemo2

这个比起1来就是多了一个子进程的状态区分,把状态拆分成三块,exit,sig和core。具体运行如下:

 


 

waitdemo1  waitdemo2

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

 

 


 

 

参考资料:

1.百度百科

2.man , grep

3.20135302博客

 

学习体会:这次代码较多,逐个运行,不能说完全吃透,但是在网上和同学博客上的注释下,看懂了一些。