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


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

    估算学习时间:共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
  • 相关阅读:
    HDU 3853:LOOPS(概率DP)
    HDU 4405:Aeroplane chess(概率DP入门)
    中国剩余定理模板
    HDU 5768:Lucky7(中国剩余定理 + 容斥原理)
    欧几里得和拓展欧几里得模板
    HDU 5025:Saving Tang Monk(BFS + 状压)
    HDU 1728:逃离迷宫(BFS)
    HDU 5795:A Simple Nim(博弈)
    HDU 5724:Chess(博弈 + 状压)
    HDU 5818:Joint Stacks(stack + deque)
  • 原文地址:https://www.cnblogs.com/lalacindy/p/4999323.html
Copyright © 2020-2023  润新知