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

第八章代码测试运行

1:env文件夹-environ.c代码

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

    printf("PATH=%s\n", getenv("PATH"));//getenv函数用来取得参数PATH环境变量的值,执行成功则返回该内容的指针

    setenv("PATH", "hello", 1);//见下方解释

    printf("PATH=%s\n", getenv("PATH"));

#if 0

    printf("PATH=%s\n", getenv("PATH"));

    setenv("PATH", "hellohello", 0);

    printf("PATH=%s\n", getenv("PATH"));

    printf("MY_VER=%s\n", getenv("MY_VER"));//版本

    setenv("MY_VER", "1.1", 0);

    printf("MY_VER=%s\n", getenv("MY_VER"));

#endif

    return 0;

}

 

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

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

getenv函数
1.获得环境变量值的函数
2.参数是环境变量名name,例如”HOME”或者”PATH”。如果环境变量存在,那么getenv函数会返回环境变量值,即value的首地址;如果环境变量不存在,那么getenv函数返回NULL
setenv函数
1.修改或添加环境变量的函数
2.将name设置成value

 

2:exec 2与1 运行结果同exec1相同。

exec2与exec1的不同是exevp中第一个参数不一样,exec1是ls,exec2是arglist[0]。

信息安全系统设计基础第十二周学习总结_第1张图片

信息安全系统设计基础第十二周学习总结_第2张图片

 

 

 

 

3:exec3与其运行结果一样,调用了execlp函数。

头文件:#include

定义函数:int execlp(const char * file,const char * arg,....);

相关函数:fork,execl,execle,execv,execve,execvp

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

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

 

 

4:forkdemo1:先打印子进程pid,休息一秒后根据fork()一次调用两次返回的性质,父进程返回子进程pid,子进程返回0。

信息安全系统设计基础第十二周学习总结_第3张图片

 

5:forkdemo2调用两次fork,产生四个子进程,所以会打印四个aftre输出。

信息安全系统设计基础第十二周学习总结_第4张图片

 

 

6:forkdemo3:调用fork()使得父进程打印子进程pid,子进程打印自身pid。

信息安全系统设计基础第十二周学习总结_第5张图片

 

7:forkdemo4    先打印进程pid,然后fork创建子进程,父进程返回子进程pid,所以输出parent一句,休眠十秒;子进程返回0,所以输出child与之后一句。

8:forkgdb   两个进程依次打印一堆数字,父进程打印是先打印两句,然后休眠一秒,然后打印一句,子进程先打印一句,然后休眠一秒,然后打印两句。

  

信息安全系统设计基础第十二周学习总结_第6张图片

信息安全系统设计基础第十二周学习总结_第7张图片

 

9:testbuf1:依次你输入要执行的指令与参数,回车表示输入结束,然后输入的每个参数对应到函数中,再调用对应的指令。

                    第一个是程序名,然后依次是程序参数。一个字符串,一个字符串构造参数列表argist,最后在数组末尾加上NULL,将arglist[0]和arglist数组传给execvp。

                    程序正常运行,execvp命令指定的程序代码覆盖了shell程序代码,并在命令结束之后退出,shell就不能再接受新的命令。

  testbuf2:在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。

               当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。

  testbuf3:fprintf作用是格式化输出到流,流可以是文件或标准输入、输出和错误。

                 fprintf(stderr,"%s",S);fprintf(stdout,"%s",S);printf("%s",S);

                 三条语句效果基本一致,不同处在重定向时,只有第一条会在屏幕输出,其余都会输出到重定向的文件。

10:testsystem   调用了system函数

                         头文件:#include<stdlib.h>       定义函数:nt system(char* command);

 

11:waitdemo1

     调用wait函数: 头文件:#include<sys/types.h>

     定义函数: pid_t wait(int* status);

    返回值:成功则返回子进程pid,失败返回-1,原因存于errno中。

 

 

 信息安全系统设计基础第十二周学习总结_第8张图片

waitdemo2:同waitdemo1相似,区别在于会分三部分打印子进程结束状态值。

信息安全系统设计基础第十二周学习总结_第9张图片

 

 

12:mkfifo函数   头文件:#include<sys/types.h>   #include<sys/stat.h>

                       定义函数:int mkfifo(const char *pathname,mode_t mode)

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

 

 

参考资料:20135237 的博客

              学习了教材深入了解计算机系统

 

你可能感兴趣的:(信息安全系统设计基础第十二周学习总结)