以下代码输出“非法搜索”:
#include #include #include int main() { errno = 0; getchar(); getchar(); getchar(); ftell( stdin ); printf( "%sn", strerror(errno) ); }
当我运行“cat script | ./a.out”以及运行“./a.out”时,会发生这种情况。 问题在于ftell,当然。 我的问题是:为什么会发生这种情况? 我认为stdin可以寻找。 fseek也会导致同样的错误。 如果stdin不可寻找,有什么方法可以做同样的事情吗?
谢谢您的回复。
Fifos不可寻求。 它们只是一个缓冲区。 一旦从fifo缓冲区read()
数据read()
,就永远无法检索它。
请注意,如果您运行程序:
需要了解更多c/c++开发分享ftell(stdin)导致非法搜索错误,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
./a.out < script
然后标准输入将是一个文件而不是fifo ,因此ftell()
将按照您的期望进行。