Terminal 管道在终端上复制输出

Terminal 管道在终端上复制输出,terminal,process,pipe,ipc,stdout,Terminal,Process,Pipe,Ipc,Stdout,为什么会发生这种情况问题只是缓冲。当您直接写入tty时,输出是行缓冲的,因此在fork之前从内部缓冲区刷新第一个“Hello”。当您通过管道将输出传输到more时,数据被块缓冲,因此不会刷新。问题只是缓冲。当您直接写入tty时,输出是行缓冲的,因此在fork之前从内部缓冲区刷新第一个“Hello”。当您通过管道将输出传输到more时,数据将被块缓冲,因此不会刷新。 hellofork.c ∗​ ​ : /*​ * Simple Hello world program with 2 process

为什么会发生这种情况

问题只是缓冲。当您直接写入tty时,输出是行缓冲的,因此在
fork
之前从内部缓冲区刷新第一个“Hello”。当您通过管道将输出传输到
more
时,数据被块缓冲,因此不会刷新。问题只是缓冲。当您直接写入tty时,输出是行缓冲的,因此在
fork
之前从内部缓冲区刷新第一个“Hello”。当您通过管道将输出传输到
more
时,数据将被块缓冲,因此不会刷新。
hellofork.c ∗​ ​ :
/*​ * Simple Hello world program with 2
processes.
*/ #include <stdio.h>
main() {​ printf("\%d:
Hello\n", getpid());
if (
!fork() )
printf("\%d: world\n", getpid()); 
}​
terminal~> ./hellofork |
more terminal~> 53438:
Hello terminal~> 53438:
Hello terminal~> 53440:
world