当前位置: 技术问答>linux和unix
unix进程间的通信:一个有意思的简单程序
来源: 互联网 发布时间:2016-04-03
本文导语: #include #include #include void main(void) { fork(); printf("h1 n"); fork(); printf("h2 n"); fork(); printf("h3 n"); } 问题1:是否有办法使得h3的输出总在h1的输出的之前? 问题2:如果把每一个的printf语句中省去'n'...
#include
#include
#include
void
main(void)
{
fork(); printf("h1 n");
fork(); printf("h2 n");
fork(); printf("h3 n");
}
问题1:是否有办法使得h3的输出总在h1的输出的之前?
问题2:如果把每一个的printf语句中省去'n',则h1、h2、h3的输出会跟以前有换行符完全不一样?
#include
#include
void
main(void)
{
fork(); printf("h1 n");
fork(); printf("h2 n");
fork(); printf("h3 n");
}
问题1:是否有办法使得h3的输出总在h1的输出的之前?
问题2:如果把每一个的printf语句中省去'n',则h1、h2、h3的输出会跟以前有换行符完全不一样?
|
1.printf("h1 n"); 这句无论是在子进程还是在父进程里总是会先执行,所以h1总是在h3前面。除非将两句位置互换?
2.有可能不一样,因为涉及到标准输出的缓冲区清空的问题。
2.有可能不一样,因为涉及到标准输出的缓冲区清空的问题。
|
堵在缓冲区里,所以一样。
|
问题1只能用线程间同步解决。
|
补充:
你所使用的终端是行缓冲的,所以加'n'时,输出是h1,h2,h3顺序输出的.