Domanda

Sto progettando un simulatore di MIPS in C ++ e il mio sistema operativo semplificato deve essere in grado di eseguire stat () di tanto in tanto (quando un programma in esecuzione sul mio simulatore richiede un ingresso o un'uscita o qualcosa del genere.)

Il problema è, devo poter affermare STDIN, STDOUT e STDERR come parametri stat "stat (" stdin "aura)" dove appassionato è il puntatore al punto di inserimento, per i dati struct restituiti, in memoria. In realtà io sarò con fstat (), che utilizza i descrittori di file per selezionare il file di essere stat-ed. Il mio tavolo descrittore di file nelle mie semplici riserve OS 0, 1, e 2 per stdin, stdout e stderr. Sono un po 'confuso su ciò che STDIN, ecc sono. Sono corsi d'acqua, mi rendo conto che, stanno definiti in stdio.h, ma come in tutto il mondo che si ottiene una struct stat con tutte le informazioni relative al file per ciascuno di questi flussi?

È stato utile?

Soluzione

In un sistema POSIX, è possibile utilizzare fileno() per convertire da un FILE* (ad esempio stdin, stdout, stderr) per un descrittore di file intero. Questo descrittore di file può essere inviato a fstat().

Altri suggerimenti

Ecco un esempio ben noto di come determinare se l'uscita del terminale standard viene reindirizzato a un file per illustrare l'utilizzo della funzione di fileno POSIX

if (!isatty(fileno(stdout))){
    fprintf(stdout, "argv, argc, someone is redirecting me elsewhere...\n");
    return 1;
}

Se si utilizza il codice di cui sopra in un programma e che detto programma è stato eseguito in questo modo

foobar_program > foobar_program.output

'foobar_program.output' conterrà

argv, argc, someone is redirecting me elsewhere...\n

Un puntatore flusso di file non è altro che una struttura di tipo puntatore a FILE, vale a dire FILE *, fileno prende che la struttura e lo converte al suo descrittore di file in questione, di conseguenza per la pagina di manuale per fileno qui

The function fileno() examines the argument stream and returns 
its integer descriptor.

qui sulle pagine di manuale POSIX, ed io 'll citazione fileno - map a stream pointer to a file descriptor ....

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