[APUE] 习题10.6程序
2020-02-01 17:57
1056 查看
问题描述:
编写一段程序测试图10-24中父进程和子进程的同步数,要求进程创建一个文件并向文件中写一个整数0,然后,进程调用fork,接着,父进程和子进程交替增加文件中的计数器值,每次计数器值增加1时,打印是哪一个进程(子进程或父进程)进行了该增加1操作。
解答:
#include"apue.h" #include<fcntl.h> #define RWRW (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP) //文件权限为用户读写组读写 const char *dscrpt_child = "output after child process, value: "; //打印是子进程进行了操作 const char *dscrpt_parent = "output after parent process, value: "; //打印时父进程进行了操作 int main(void) { pid_t pid; int fd, count = 0, i, j; char *initial_str = "the initial num: 0\n"; char str_count[10]; TELL_WAIT(); fd = open("testfile.txt", O_RDWR | O_CREAT | O_TRUNC | O_APPEND, RWRW);//新建一个名为“testfile.txt”的文本文件 if (write(fd, initial_str, strlen(initial_str)) < strlen(initial_str)) //写入第一行,初始值为0 err_sys("write error\n"); if ((pid = fork()) < 0) err_sys("fork error\n"); else if (pid == 0){ //子进程 TELL_PARENT(getppid()); //给父进程发送信号,父进程先走 for (i = 0; i < 10; i++ ) //只尝试10次加1操作 { WAIT_PARENT(); //等待来自父进程的信号 count = 2 * ( i + 1 ); if(write(fd, dscrpt_child, strlen(dscrpt_child)) < strlen(dscrpt_child))//写入子进程操作描述 err_sys("write error\n"); if(sprintf(str_count, "%d\n", count) < 0) //把count转换成字符串 err_sys("sprintf error\n"); if(write(fd, str_count, strlen(str_count)) < strlen(str_count))//在子进程操作描述后追加数字和换行符 err_sys("write error\n"); TELL_PARENT(getppid());//给父进程发信号 } exit(0); } else //父进程 { for (j = 0; j < 10; j++) { WAIT_CHILD(); //等待来自子进程的信号 count = 2 * j + 1; if(write(fd, dscrpt_parent, strlen(dscrpt_parent)) < strlen(dscrpt_paren t)) err_sys("write error\n"); if(sprintf(str_count, "%d\n", count) < 0) err_sys("sprintf error\n"); if(write(fd, str_count, strlen(str_count)) < strlen(str_count)) err_sys("write error\n"); TELL_CHILD(pid); //给子进程发信号 } } close(fd); printf("All processes done!\n"); exit(0); }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- c++ primer习题10.6 文本查询程序
- 现代控制理论习题解答与Matlab程序示例
- APUE 程序清单10-11 信号设置和sigprocmask实例
- 习题1-13(垂直方向直方图):编写一个程序打印输入中单词长度的垂直方向的直方图。
- C++Primer(第四章课后习题)(程序题源代码)
- C++Primer(第六章课后习题)(程序题源代码)
- C++Primer(第十一章课后习题程序题源代码)
- 现代控制理论习题解答与Matlab程序示例
- [APUE] 第四章习题解答
- Python程序基础设计 序列与字典习题
- C++Primer第三章(第五版) 课后习题 程序题 源代码
- [原创] 位运算和bit位操作程序题 -- 谭浩强C语言习题答案
- [原创] 指针操作程序答案 — 谭浩强C语言习题答案
- C++ 一个问题:每次读取一个字符存入一个string中,最少读取100个字符,应该如何提高程序的性能?(C++ Primer 9.37 习题)
- C++ Primer 学习总结(附习题程序)
- 习题课第一次作业:1、去除C程序中的注释
- apue 1 课后习题
- c程序语言 习题1-13
- C语言复习笔记三:三种程序结构记习题总结(1)
- APUE 中文第二版中 10.13节程序10-11 中的分析