Domanda

Il seguente codice emette "Lalegale Seek":

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

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

Ciò si verifica quando eseguo "Cat Script | ./a.out" e quando correvo "./a.out". Il problema è con Ftell, ovviamente. La mia domanda è: perché accade? Penserei che Stdin possa essere cercato. FSEEK provoca anche lo stesso errore. Se stdin non è richiesto, c'è un modo per fare lo stesso genere di cose?

Grazie per le vostre risposte.

È stato utile?

Soluzione

I FIFO non sono richiesti. Sono semplicemente un buffer. Una volta che i dati sono stati read() Da un buffer FIFO, non può mai essere recuperato.

Nota che se hai eseguito il tuo programma:

./a.out < script

quindi l'input standard sarebbe un file e non a FIFO, Così ftell() Farò quindi quello che ti aspetti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top