您的位置:首页 > 其它

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

2015-11-29 23:39 239 查看
第八章代码测试运行

1:env[b]文件夹-environ.c代码[/b]

#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]。





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。



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



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



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

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





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中。



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



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

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

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

参考资料:20135237 的博客

学习了教材深入了解计算机系统
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: