8

以下代码输出“非法搜索”:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    errno = 0;
    getchar();
    getchar();
    getchar();
    ftell( stdin );
    printf( "%s\n", strerror(errno) );
}

这发生在我跑步时cat script | ./a.out以及我刚跑步时./a.out。当然,问题出在 ftell 上。我的问题是:为什么会发生这种情况?我认为标准输入可以搜索。fseek 也会导致相同的错误。如果标准输入不可搜索,有什么方法可以做同样的事情吗?

谢谢您的回复。

4

1 回答 1

14

Fifos 是不可搜索的。它们只是一个缓冲区。一旦数据read()来自 fifo 缓冲区,就永远无法检索。

请注意,如果您运行程序:

./a.out < script

那么标准输入将是一个文件而不是一个fifo,所以ftell()会按照您的期望进行。

于 2010-03-23T18:22:34.953 回答