zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础第十二周学习总结

    第十二周(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博客

     

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

     

     
  • 相关阅读:
    [Cogs727] [网络流24题#2] 太空飞行计划 [网络流,最小割]
    [Cogs14] [网络流24题#1] 飞行员分配方案 [网络流,最大流,二分图匹配]
    [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]
    基本高精度模板
    Dinic模板
    [poj1698]Alice's Chance[网络流]
    [cf 599D] Spongebob and Squares
    [cf 599C] Day at the Beach
    [BZOJ1004]Cards
    [BZOJ1007]水平可见直线
  • 原文地址:https://www.cnblogs.com/zhengwei0712/p/4995875.html
Copyright © 2011-2022 走看看