C读取管道传输的文件内容

时间:2017-03-25 18:32:00

标签: c pipe

我正在尝试对某些数据进行分析,而我正在构建一些我希望与管道链接在一起的工具。

cat file.dat | ./tool | ./tool2 ...

但我不确定如何读取数据中的管道。我知道它是通过stdin进入的,但我可以等到文件结束。所以我想我正在寻找这样的事情:

long value;
while(scanf("%ld\n",&value)){
  value2 = do_something(value);
  printf("%ld\n",value2);
}
return 0;

但是当stdin是"空"时,scanf不会返回0。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

函数scanf在到达文件末尾时返回EOF。您可以使用这样的代码来检查:

while (1) {
    long value;
    int ret = scanf("%ld\n", &value);
    if (ret == EOF) {
        break;
    }
    printf("%ld\n", value);
}

有关详细信息,请参阅docs