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

Jim*_*Jim 7 c file-io ftell

以下代码输出"非法搜索":

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

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

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

谢谢您的回复.

geo*_*car 13

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

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

./a.out < script
Run Code Online (Sandbox Code Playgroud)

然后标准输入将是一个文件,而不是一个fifo,所以ftell()然后将做你期望的.

  • 示例+1表示`cat file | ./a.out`和`./a.out <file`之间的区别. (2认同)