为什么ftell(stdin)导致非法查找错误

问题描述 投票:8回答:1

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

#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不可搜索,有什么办法可以做同样的事情?

谢谢您的答复。

c file-io ftell
1个回答
14
投票

Fifo不可搜寻。它们只是缓冲区。一旦从fifo缓冲区中将数据read()删除,就无法再获取它。

注意,如果您运行程序:

./a.out < script

然后标准输入将是file而不是fifo,因此ftell()然后将执行您期望的操作。

© www.soinside.com 2019 - 2024. All rights reserved.