- 论坛徽章:
- 0
|
- #include<stdio.h>
- #include<stdlib.h>
- #include<sys/types.h>
- #include<unistd.h>
- int glob = 6;
- int
- main(void)
- {
- int var;
- pid_t pid;
- var = 88;
- printf("before vfork\n");
- if((pid = vfork()) < 0){
- printf("vfork error\n");
- exit(EXIT_FAILURE);
- }else if(pid == 0){
- glob++;
- var++;
- exit(EXIT_SUCCESS);
- }
- /* parent */
- int res;
- res = printf("pid = %d, glob = %d, var = %d\n",
- getpid(), glob, var);
- exit(EXIT_SUCCESS);
- }
复制代码 在看APUE的时候,看到vfork实例,书上说当子进程调用exit的时候,会执行标准I/O缓存的刷新操作并关闭所有打开的标准I/O流,
然后到父进程运行时,父进程调用printf函数,标准输出已经关闭了,所以printf打印不出信息。
但是我执行这段代码的时候,父进程调用printf还是能打印信息:
$ ./vfork
before vfork
pid = 12260, glob = 7, var = 89
到这里我就不太明白了为什么还可以打印出信息,难道exit函数没有关闭输出流? |
|