作者 loter ( Maple leaf) 看板 IM100HW
标题 Re: [啧啧] fork阴我
时间 Sun Mar 29 21:14:15 2009
───────────────────────────────────────
并不是 fork 阴你,是因为你没有先 flush parent process's stdout buffer 的关系,
所以是你下面每一个 fork 出来的 child process 中自己的 buffer,都还会带有
"fork" 这个字串,在 printf("%d ",n); 时然後再加上 n 的值,所以你会以为
child process 起始位置有误,实际上还是从 fork(); 以後开始执行,
解决方法就是把第一次 printf 改成 printf("fork\n"); 就ok了。
作者: Domos (Domos) 看板: C_and_CPP
标题: [问题] fork的问题
时间: Sun Mar 29 20:57:34 2009
#include<stdio.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
printf("fork "); //可是他x的居然跑来这里...
或是在这里加个 fflush(stdout);
int n = atoi(argv[1]);
pid_t pid = 0;
while(pid == 0 && n) //会跳到这里执行
{
--n;
pid = fork(); //理论上fork出来
}
if(pid > 0)
{
wait(NULL);
printf("%d ",n);
return 0;
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.249.225
1F:→ Domos:解决了,是buffer的问题 03/29 21:24
2F:→ james732:分享一下 我还没想通 XD 03/29 21:25
3F:→ Domos:是printf内建buffer的关系,实际上还是从while开始跑 03/29 21:42
※ 编辑: Domos 来自: 140.112.249.225 (03/29 21:44)
4F:→ james732:原来如此 在 printf 後加个 fflush(stdout); 似乎也可以 03/29 21:45
5F:→ james732:哦哦 原po有讲了 XDD 03/29 21:46