ftell(stdin)导致非法搜索错误

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

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

当我运行“cat script | ./a.out”以及运行“./a.out”时,会发生这种情况。 问题在于ftell,当然。 我的问题是:为什么会发生这种情况? 我认为stdin可以寻找。 fseek也会导致同样的错误。 如果stdin不可寻找,有什么方法可以做同样的事情吗?

谢谢您的回复。

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

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

 ./a.out < script 

然后标准输入将是一个文件而不是fifo ,因此ftell()将按照您的期望进行。