ftell (stdin) вызывает ошибку незаконного поиска - PullRequest
6 голосов
/ 23 марта 2010

Следующий код выводит «Незаконный поиск»:

#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 не доступен для поиска, есть ли способ, которым я могу сделать то же самое?

Спасибо за ваши ответы.

1 Ответ

12 голосов
/ 23 марта 2010

Fifos не доступны для поиска. Они просто буфер. Как только данные были read() из буфера fifo, они никогда не могут быть восстановлены.

Обратите внимание, что если вы запустили свою программу:

./a.out < script

тогда стандартным вводом будет файл , а не fifo , поэтому ftell() будет делать то, что вы ожидаете.

...