ftell (stdin) вызывает недопустимый, ищут ошибку

Следующие выводы кода, "Недопустимые, ищут":

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

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

Это происходит, когда я запускаю "скрипт кошки |./a.out", а также когда я просто выполняю "./a.out". Проблема с ftell, конечно. Мой вопрос: почему это происходит? Я думал бы, что stdin может быть seekable. fseek также вызывает ту же ошибку. Если stdin не seekable, там некоторый способ, которым я могу сделать тот же вид вещи?

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

7
задан Jim 23 March 2010 в 18:15
поделиться

1 ответ

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

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

./a.out < script

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

13
ответ дан 6 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: