ftell (stdin) provoca un errore di ricerca illegale
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.
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