Linux:一个程序到另一个程序的管道输出

时间:2015-10-24 17:35:56

标签: c linux

我制作了两个简单的程序:

out.c

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

int main()
{
    int x;
    srand((unsigned int)time(NULL));
    for(;;)
    {
        x = rand();
        printf("%d\n", x % 100);
        sleep(1);
    }
    return 0;
}

in.c

#include <stdio.h>

int main()
{
    int x;
    for(;;)
    {
        scanf("%d",&x);
        printf("%d\n", x);
    }
    return 0;
}

我像./out | ./in一样运行它,但我没有得到任何打印。以管道输入

的方式运行的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

可以通过在out.c程序中刷新stdout来解决此问题。你需要这样做,因为如果stdout不是tty,它不会自动刷新,具体取决于你的操作系统。

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

int main()
{
    int x;
    srand((unsigned int)time(NULL));
    for(;;)
    {
        x = rand();
        printf("%d\n", x % 100);
        fflush(stdout); // <-- this line
        sleep(1);
    }
    return 0;
}