重定向 stdout 时 C 程序输出的差异[重复]

问题描述 投票:0回答:0

给定以下名为“hello”的程序(代码如下), 做的时候: 。/你好 输出是:

Hello
Hello
Hello
Hello
Hello
Hello
Hello

当这样执行时:./hello > out.txt out.txt 包含 12 个你好。 为什么? 我知道我重定向了标准输出,所以 Fludh 可能会受到影响。

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
 // printf("Main PID: %d\n", getpid());
 for (int j = 0; j<3; j++)
 {
    int pid = fork();
    if (!pid) 
    {
        printf("Hello\n");
    }
 }
 
 while(wait(NULL) > 0) ;
}

为了检查 pid 和 ppid,我将

printf("Hello\n");
更改为:

printf("%d PID: %d, PPID: %d\n",j, getpid(), getppid());

并在 out.txt 文件中得到奇怪的输出:

0 PID: 4432, PPID: 4431
1 PID: 4433, PPID: 4432
2 PID: 4434, PPID: 4433
0 PID: 4432, PPID: 4431
1 PID: 4433, PPID: 4432
1 PID: 4435, PPID: 4431
2 PID: 4436, PPID: 4435
0 PID: 4432, PPID: 4431
2 PID: 4437, PPID: 4432
1 PID: 4435, PPID: 4431
0 PID: 4432, PPID: 4431
2 PID: 4438, PPID: 4431

另外,当我在循环外添加

printf("Main PID: %d\n", getpid());
(在它上面) out.txt 包含它 8 次!

有什么想法吗?

我期待输出包含相同数量的 hellos

c printf stdout io-redirection
© www.soinside.com 2019 - 2024. All rights reserved.