当前位置: 技术问答>linux和unix
菜鸟问题!!!!fork 与stdout 缓冲区问题??????
来源: 互联网 发布时间:2016-02-01
本文导语: 如下: int main (void) { printf ("This is my output"); fork(); return 0; } 输出结果为:This is my output.This is my output. 为什么会输出两次,我在子进程中没有任何操作.最好能否画出类似下面的图表,万分感激.... 父进...
如下:
int main (void)
{
printf ("This is my output");
fork();
return 0;
}
输出结果为:This is my output.This is my output.
为什么会输出两次,我在子进程中没有任何操作.最好能否画出类似下面的图表,万分感激....
父进程的文件描述符表 系统文件表
[0]|_________|----> |_________|
[1]|_________|-----> |_________|
[2]|_________|------> |_________|
[3]|_________|-------> |_________|
|_________| |_________|
子进程的文件描术符表
[0]|_________|------------->
[1]|_________|-------->
[2]|_________|---------->
[3]|_________|----------->
希望通过上面的程序,画出这样的表格说明父进程的文件描述符与子进程的文件描述符与共享的系统文件表三者之间的关系.
这个小程序虽然非常小,但是输出的的结果我真是搞不明白.
我试过在这句代码里 printf ("This is my output.n/*后面加了个换行符*/");
输出的结果就是一行了,但不明白是为什么.
书上解释由于stdout 是标准的行缓冲输出.
只是想知道,这两个进程在内存中的真实的形态与共享的系统文件表之间的关系.
为什么会输出两次我在子进程中没有任何操作.
int main (void)
{
printf ("This is my output");
fork();
return 0;
}
输出结果为:This is my output.This is my output.
为什么会输出两次,我在子进程中没有任何操作.最好能否画出类似下面的图表,万分感激....
父进程的文件描述符表 系统文件表
[0]|_________|----> |_________|
[1]|_________|-----> |_________|
[2]|_________|------> |_________|
[3]|_________|-------> |_________|
|_________| |_________|
子进程的文件描术符表
[0]|_________|------------->
[1]|_________|-------->
[2]|_________|---------->
[3]|_________|----------->
希望通过上面的程序,画出这样的表格说明父进程的文件描述符与子进程的文件描述符与共享的系统文件表三者之间的关系.
这个小程序虽然非常小,但是输出的的结果我真是搞不明白.
我试过在这句代码里 printf ("This is my output.n/*后面加了个换行符*/");
输出的结果就是一行了,但不明白是为什么.
书上解释由于stdout 是标准的行缓冲输出.
只是想知道,这两个进程在内存中的真实的形态与共享的系统文件表之间的关系.
为什么会输出两次我在子进程中没有任何操作.
|
printf ("This is my output");后打印的内容在缓冲区里,fork后,父子进程的缓冲区里也是相同的,进程退出时,缓冲区输出到屏幕,所以有两份。
|
printf ("This is my outputn");
缓冲区的数据在fork之前已经输出的屏幕了,此时缓冲区里没有数据了。
缓冲区的数据在fork之前已经输出的屏幕了,此时缓冲区里没有数据了。
|
终端为行缓冲模式时上面的说法才是正确的。