UNIX环境高级编程之第8章:进程控制-习题
2015-09-11 16:32
369 查看
/************************************************************************* > File Name: 8.3.c > Author: Xiuyang(Carl) Sun > Mail: sunxiuyang04@gmail.com > Created Time: 2015年08月28日 星期五 23时42分34秒 ************************************************************************/ #include <apue.h> int globvar = 6; int main(){ int var; pid_t pid; var = 88; printf("before vfork\n"); if((pid = vfork())<0){ err_sys("vfork error"); }else if(pid == 0){ globvar++; var++; _exit(0); } printf("pid = %ld, glob = %d, var = %d\n",(long)getpid(),globvar,var); exit(0); }
如果用exit调用代替_exit调用,那么可能是标准输出关闭,是printf返回-1.
实验用下面的代码
i = printf("pid = %ld, glob = %d, var = %d\n",(long)getpid(),globvar,var); sprintf(buf, "%d\n", i); write(STDOUT_FILENO, buf ,strlen(buf));
/************************************************************************* > File Name: 8.3.c > Author: Xiuyang(Carl) Sun > Mail: sunxiuyang04@gmail.com > Created Time: 2015年08月28日 星期五 23时42分34秒 ************************************************************************/ #include <apue.h> int globvar = 6; int main(){ int var; pid_t pid; var = 88; printf("before vfork\n"); if((pid = vfork())<0){ err_sys("vfork error"); }else if(pid == 0){ globvar++; var++; fclose(stdout); exit(0); } int i; char buf[10]; i = printf("pid = %ld, glob = %d, var = %d\n",(long)getpid(),globvar,var); sprintf(buf, "%d\n",i); write(STDOUT_FILENO, buf, strlen(buf)); exit(0); }修改之后,就输出-1,因为实验时我的只使用exit(0)并没有关闭标准I/O,所有再加上了fclose(stdout),假设exit关闭标准I/O流,但不关闭文件描述符STDOUT_FILENO.有些版本的标准I/O库会关闭与标准输出相关联的文件描述符从而引起write标准输出失败,再这种情况下调用dup讲标准输出复制到另一个描述符,write则使用新复制的文件描述符.
8.4
出现这种情况就是子进程在父进程结束了还没有结束
可以使用TELL_PARENT(getppid())告诉父进程 我们做完了
相关文章推荐
- ASP.NET 邮件发送 System.Net.Mail
- spring project
- java中如何使用任务调度
- Java_jdbc 基础笔记之十四 数据库连接(元数据)
- 使用Maven管理spring环境的profile定义
- Java通过一系列工具打包成不需要JDK支持的exe文件
- C++编程笔记 二(继承与多态)
- JSP:JavaBean+EL函数+JSTL标签
- java数组常用方法
- C语言文件操作函数
- java之十篇:关于Read time OUt
- java之九篇:外部类、内部类(匿名类)间形成的调用关系
- c++实现顺序存储的队列
- java 静态代码块 静态方法
- java之八篇:如何看待java中的接口
- 关于python函数的可变参数和关键词参数
- Struts 2 Hello World Annotation Example
- 将java对象与xml互相转换
- java之七篇:为何java可反编译
- spring mvc 导出Excel