2013-01-07 14 views
6

Sono confuso riguardo alle tabelle dei file di sistema Unix.tabelle file di sistema Unix

  • Quando due o più processi aprire un file per la lettura, non la tabella di file system creare voci separate per ogni processo o una singola voce?

  • Se una singola voce viene creata per più processi che aprono lo stesso file, anche i loro correttori di file saranno uguali?

  • Se process 1 apre file1.txt per la lettura e process 2 apre lo stesso file file1.txt per la scrittura, sarà la tabella di file system creare uno o due voci?

+0

Dup di http://stackoverflow.com/questions/4277289/are-file-descriptors-shared-when-forking –

+0

Sir come può essere questo un duplicato? sta chiedendo informazioni su genitore figlio e fork, la mia domanda è diversa – Alfred

risposta

19

Ci sono tre "tavoli di file system": c'è un tavolo descrittore di file che associa descrittori di file (piccoli interi) alle voci della tabella dei file aperti. Ogni voce nella tabella dei file aperti contiene (tra le altre cose) un offset di file e un puntatore alla tabella di inode in memoria. Ecco una foto: http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/filetable.rich.jpg

Quindi non v'è né giusta voce della tabella di un file per un file aperto né v'è una sola per ogni processo ... c'è uno per open() chiamata, ed è condiviso se il descrittore di file è dup() cata o fork() ed.

rispondere alle vostre domande:

1) Quando due o più processi aprire un file per la lettura, c'è una voce nella tabella di file aperto per aprire. C'è anche una voce per open se la procedura one apre il file più volte.

2) Una voce singola è non creata nella tabella di file aperti per processi diversi che aprono lo stesso file (ma c'è una sola voce nella tabella di inode in memoria).

3) Se file1.txt viene aperto due volte, nello stesso o in due processi diversi, vi sono due diverse voci di tabella di file aperte (ma una sola voce nella tabella di inode in memoria).

+0

Sto chiedendo informazioni sulla tabella dei file di sistema. – Alfred

+2

C'è la tabella di file aperta e c'è la tabella di inode in memoria ... entrambe sono tabelle di file "di sistema" poiché sono gestite dal sistema (OS). La tua domanda riguarda l'apertura di file, quindi deve riguardare il primo, non il secondo. –

+0

Per quanto ne so ci sono tre tavoli (almeno).Tabella dei descrittori di file, tabella dei file di sistema e tabella degli inode di memoria – Alfred

0

Lo stesso file può essere aperto contemporaneamente da diversi processi e anche dallo stesso processo (risultante in diversi descrittori di file per lo stesso file) a seconda dell'organizzazione file e del filesystem. Le operazioni sui descrittori come spostare il puntatore del file o chiuderlo sono indipendenti (non influenzano altri descrittori per lo stesso file). Le operazioni del file (come una scrittura) possono essere viste dalle operazioni sugli altri descrittori (una lettura posteriore può leggere i dati scritti).

Questo è dal open(System call) wiki page