Pergunta

O código seguinte produz "busca ilegal":

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

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

Isso ocorre quando eu executo "gato script | ./a.out", bem como quando eu apenas corro "./a.out". O problema é com o FTELL, é claro. Minha pergunta é: por que isso ocorre? Eu acho que o stdin pode ser procurável. O FSEEK também causa o mesmo erro. Se Stdin não é procurado, existe alguma maneira de fazer o mesmo tipo de coisa?

Obrigado por suas respostas.

Foi útil?

Solução

Fifos não são procuráveis. Eles são simplesmente um buffer. Uma vez que os dados tenham sido read() De um buffer FIFO, ele nunca pode ser recuperado.

Observe que se você executou seu programa:

./a.out < script

então a entrada padrão seria um Arquivo e não um FIFO, assim ftell() fará então o que você espera.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top