ftell (stdin) вызывает незаконную ошибку поиска

StackOverflow https://stackoverflow.com/questions/2502489

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

FIFOS не засыщены. Они просто буфер. Как только данные были read() Из буфера FIFO его никогда не может быть извлечено.

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

./a.out < script

тогда стандартный вход будет файл а не Фиф, так ftell() тогда сделает то, что вы ожидаете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top