以下代码输出“非法搜索”:
#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。我的问题是:为什么会这样?我认为stdin可以寻找。 fseek也会导致相同的错误。如果stdin不可搜索,有什么办法可以做同样的事情?
谢谢您的答复。
Fifo不可搜寻。它们只是缓冲区。一旦从fifo缓冲区中将数据read()
删除,就无法再获取它。
注意,如果您运行程序:
./a.out < script
然后标准输入将是file而不是fifo,因此ftell()
然后将执行您期望的操作。