以下代码输出“非法寻求”:

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

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

当我运行“ CAT脚本| ./a.out”以及我刚运行的“ ./a.out”时,就会发生这种情况。当然,问题在于Ftell。我的问题是:为什么会发生这种情况?我认为可以寻求Stdin。 FSEEK也会导致相同的错误。如果无法寻求Stdin,我有什么办法可以做同样的事情吗?

谢谢您的回复。

有帮助吗?

解决方案

FIFOS不可寻找。它们只是一个缓冲区。一旦数据 read() 在FIFO缓冲区中,永远无法检索。

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

./a.out < script

那么标准输入将是 文件 而不是一个 FIFO, , 所以 ftell() 然后将做您期望的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top