"Leggi" un file senza utilizzare un puntatore di file

7

Mi è stata fatta questa domanda in un'intervista. In qualche modo dovrei "leggere" un file nel mio programma C come input senza usare un puntatore di file (incluse le funzioni "f", ad es. Fgets, fscanf ecc.). Inoltre, non sono autorizzato a reindirizzare l'account tramite il terminale, ovvero senza chiamate di sistema o exec. Il programma non otterrà il file durante il runtime.

Mi piacerebbe sapere come sarebbe possibile farlo.

    
posta Khushman Patel 22.07.2012 - 12:41
fonte

1 risposta

19

I puntatori di file non sono l'unico modo per accedere ai file su sistemi POSIX (che, ovviamente, è Linux).
Di fatto, la struttura FILE esiste per semplificare il lavoro con i file in modo multipiattaforma ( fopen() funzionerà su Linux, Mac OS X, qualsiasi BSD e Windows) e per fornire alcuni servizi come il buffering trasparente (l'I / O bufferizzato è molto più veloce).
Tutto ciò di solito è buono, a meno che non sia controproducente (è necessario che il file sia sincronizzato per l'accesso comune da molti processi) o pericoloso (l'output bufferizzato potrebbe non essere svuotato quando necessario e potrebbe lasciare il file in cattivo stato se interrotto in modo improprio ). Ora, non sono un esperto e questi problemi potrebbero essere inesistenti, ma ci sono certamente dei motivi per usare l'API di livello inferiore fornita da POSIX: il meccanismo descrittore di file , open() , read() , write() , close() e mmap() .

Queste funzioni sono gli elementi costitutivi dell'abstract FILE* , almeno in Linux, (puoi testarlo eseguendo un programma I / O di file di esempio con strace ) e puoi usarli se vuoi l'accesso diretto in un file.

Questa è probabilmente la soluzione al problema che l'intervistatore si aspettava. La ragione per cui potrebbe volere che tu lo sappia è che sei stato intervistato per un lavoro nei sistemi embedded; la conoscenza del sistema sottostante è essenziale in tale posizione.

Una volta ho incontrato un guru di programmazione Linux, che mi ha detto che pensa che una persona possa affermare di conoscere C quando può implementare l'intera libreria standard da solo su almeno una piattaforma senza alcuna difficoltà significativa. In alcuni domini, la conoscenza di basso livello è un must.

    
risposta data 22.07.2012 - 15:39
fonte

Leggi altre domande sui tag