- 论坛徽章:
- 0
|
回复 #1 zengmao 的帖子
因为标准输出是line buffered
程序真正分支的开始是fork以后的代码,第一个x其实是在buffer里面(这个时候还没有子进程父进程的概念),fork的时候子进程也拷贝了一份父进程的buffer,所以子进程会得到x。xby一定是连在一起的,因为标准输出默认是line buffered,没有遇到回车是不会输出东西的,只有在进程退出的时候才会将buffer清空。同理xay也一定是在一起的。
至于xay和xby的先后顺序是不能确定的。
如果你先fflush了的话就会少个x了
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- int main( void )
- {
- int p1;
- putchar( 'x' );
- fflush( stdout );
- //setbuf(stdout,NULL);
- while( ( p1 = fork( ) ) == -1 );
- if( p1 == 0 )
- printf( "b" );
- else
- printf( "a" );
- printf( "y" );
- return 0;
- }
复制代码
这样出来的结果就是
xbyay
还是那句话,由于stdout默认是line buffered,所以by一定是连在一起的(只有在子进程退出的时候才会flush掉),ay同理也是连在一起的。至于ay,by的先后顺序是不一定的
[ 本帖最后由 churchmice 于 2009-11-9 21:40 编辑 ] |
|