我有一个代码如下
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("a\n");
fork();
printf("b\n");
if(fork() == 0) {
printf("c\n");
exit(0);
}
printf("d\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
a
b
d
a
b
c
a
b
d
a
b
c
Run Code Online (Sandbox Code Playgroud)
我不知道为什么输出重复多次.
我不知道为什么输出重复多次
因为printf()是缓冲的.
进程调用时fork(),生成的子进程将获取父进程缓冲区的副本.
您可以fflush(stdout)在每次调用之前放置此输出缓冲区fork().在这种情况下,输出应该是:
a
b
b
d
c
d
c
Run Code Online (Sandbox Code Playgroud)
请注意,如果输出引用到终端,则默认情况下它将是行缓冲的,即:每次将a缓冲区\n发送到输出时都会转储缓冲区.如果要将输出重定向到文件,则不是这样.
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |