[置顶] CSAPP第八章家庭作业参考答案
2018-01-22 15:37
916 查看
(CSAPP第三版系列)导航篇传送门
8.12 这个程序会输出多少个“hello”输出行?
分析该程序doit()函数的行为,4个进程都会再返回到主程序,所以程序会输出8个“hello”输出行。
8.16 下面这个程序的输出是什么?
分析该程序,子进程将count减一,父进程将其加一后输出,所以输出是: counter = 1。
8.20使用execve编写一个叫做myls的程序,该程序的行为和/bin/ls程序的一样。
程序如下:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[],char *envp[])
{
if(execve("/bin/ls",argv,envp) == -1)
printf("execve error!\n");
return 0;
}
测试结果如下:
8.24 修改图8-18中的程序。
程序如下:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main()
{
int status,i;
pid_t pid;
for(i = 0;i < N;i++)
if((pid = fork()) == 0)
{
int *pt = 0x0;
*pt = 15213;
exit(100+i);
}
while((pid = waitpid(-1,&status,0)) > 0)
{
if(WIFEXITED(status))
printf("child %d terminated normally with exit status = %d\n",pid,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
{
fprintf(stderr,"child %d terminated by signal %d",pid,WTERMSIG(status));
psignal(WTERMSIG(status)," ");
}
else
printf("child %d terminated abnormally\n",pid);
}
if(errno != ECHILD)
printf("waitpid error\n");
exit(0);
}
测试结果如下:
8.12 这个程序会输出多少个“hello”输出行?
分析该程序doit()函数的行为,4个进程都会再返回到主程序,所以程序会输出8个“hello”输出行。
8.16 下面这个程序的输出是什么?
分析该程序,子进程将count减一,父进程将其加一后输出,所以输出是: counter = 1。
8.20使用execve编写一个叫做myls的程序,该程序的行为和/bin/ls程序的一样。
程序如下:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[],char *envp[])
{
if(execve("/bin/ls",argv,envp) == -1)
printf("execve error!\n");
return 0;
}
测试结果如下:
8.24 修改图8-18中的程序。
程序如下:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main()
{
int status,i;
pid_t pid;
for(i = 0;i < N;i++)
if((pid = fork()) == 0)
{
int *pt = 0x0;
*pt = 15213;
exit(100+i);
}
while((pid = waitpid(-1,&status,0)) > 0)
{
if(WIFEXITED(status))
printf("child %d terminated normally with exit status = %d\n",pid,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
{
fprintf(stderr,"child %d terminated by signal %d",pid,WTERMSIG(status));
psignal(WTERMSIG(status)," ");
}
else
printf("child %d terminated abnormally\n",pid);
}
if(errno != ECHILD)
printf("waitpid error\n");
exit(0);
}
测试结果如下:
相关文章推荐
- [置顶] CSAPP第六章家庭作业参考答案
- [置顶] CSAPP第二章家庭作业参考答案
- [置顶] CSAPP第七章家庭作业参考答案
- [置顶] CSAPP第四章家庭作业参考答案
- [置顶] CSAPP第五章家庭作业参考答案
- 《深入理解计算机系统第三版》第三章家庭作业参考答案
- 【深入理解计算机系统-第二版】第二章部分家庭作业(Homework)参考答案
- 《深入理解计算机系统》之家庭作业8.25题答案
- C语言程序设计 练习题参考答案 第八章 文件(2)
- C语言程序设计 练习题参考答案 第八章 文件(1)
- 第5章部分作业的参考答案
- 第八章 集成学习-机器学习(周志华) 参考答案
- 20135306、20135307家庭作业3.70答案
- 数据库第一次作业参考答案
- 数据库第三次作业参考答案
- [置顶] [CSAPP笔记][第八章异常控制流][呕心沥血千行笔记]
- 第五次作业参考答案及反馈
- 马哥iptables作业参考答案
- Python编程 从入门到实践 第三章 作业参考答案