2017-2018-1 20155214 《信息安全系统设计基础》 第6周学习总结

2017-2018-1 20155214 《信息安全系统设计基础》

第6周学习总结

教材学习内容总结

  • 了解异常及其种类
  • 理解进程和并发的概念
  • 掌握进程创建和控制的系统调用及函数使用:fork,exec,wait,waitpid,exit,getpid,getppid,sleep,pause,setenv,unsetenv,
  • 理解数组指针、指针数组、函数指针、指针函数的区别
  • 理解信号机制:kill,alarm,signal,sigaction
  • 掌握管道和I/O重定向:pipe, dup, dup2

教材学习中的问题和解决过程

1071473-20171029225159492-178291161.png
pipe创建一个单向数据通道, 可用于用于进程间通信。 数组 pipefd 用于返回两个引用管道两端的文件描述符。

1071473-20171029231306523-1880720470.png
dup通过系统调用将创建文件描述符 oldfd 的副本,使用新描述符的最低编号的未使用描述符。

1071473-20171029231743101-330473319.png

dup2通过 系统调用执行相同的任务 (), 而不是使用最低编号的未使用的文件描述符, 它使用 descrip‐newfd 中指定的 tor 编号。 如果描述符 newfd 以前打开, 在被重用之前, 它是静默关闭的。

代码调试中的问题和解决过程

  • 问题1:
  • 问题1解决方案:

Mybush的编写及实现

  • 题目要求

使用fork,exec,wait实现mybash
写出伪代码,产品代码和测试代码
发表知识理解,实现过程和问题解决的博客(包含代码托管链接)

  • 题目背景

已知fork函数用于产生一个与父进程完全相同的子进程。

调用man execupman wait查看相关函数信息
1071473-20171022111729740-2118492054.png
exec () 函数系列用于将当前进程映像替换为新的进程映像,因此可以在子进程中用于执行命令行

1071473-20171022111739818-617621350.png
所有这些系统调用都用于等待调用进程的子级中的状态更改, 并获取有关其状态已更改的子级的信息.

mybash需要实现,用户输入命令行字符串,

mybash创建一个新的子程序,用以执行用户命令,

父进程中等待子进程命令执行完毕,

循环直至退出。

  • 伪代码
do{

输入命令行字符串;

产生子进程;

执行命令行;

等待执行结束;

}while(true);
  • Mybush源代码
……
int main(){

    pid_t pid;

    char comline[NUM];
    char *argv[NUM];

    do{

    printf("Mybash:~$ ");

    fgets(comline,NUM,stdin);/*输入命令行字符串*/

    parseline(comline,argv);/*格式转换*/

    pid = fork();/*产生新的子程序*/

    if(pid == 0){/*在子程序中执行命令*/
    
       execvp(argv[0],argv);   /*执行命令行*/

    }

    waitpid(pid,NULL,0);/*等待子进程终止*/
 
    }while(1);

    return 0;
}
……
  • 测试运行截图
    1071473-20171022125051943-1117062672.png

代码托管

结对及互评

本周结对学习情况

- [20155216](博客链接)
- 结对照片
- 结对学习内容

其他(感悟、思考等,可选)

参考资料

转载于:https://www.cnblogs.com/besti155214/p/7751312.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值