è il file puntato da stdin descrittore di file la stessa lima per diversi processi?

StackOverflow https://stackoverflow.com/questions/3816774

  •  26-09-2019
  •  | 
  •  

Domanda

Ho una domanda in mente. Per convenzione, unix associa il descrittore 0, 1, 2 per stdin, stdout, stderr lima su ogni processo. È il file, ad esempio, puntato da stdin, condiviso da diversi processi? Se condivisa, quando apriamo due gusci di digitare alcuni ingressi a questi due gusci, come è il sistema operativo facendo per gestire il file condiviso?

È stato utile?

Soluzione

Panoramica

La tabella descrittore è per processo, quindi è possibile per ogni processo nel sistema per avere una diversa apertura file in ogni fessura tabella descrittore

Ma in pratica è un po 'più complessa. Se due processi aprire un file in modo indipendente, quindi ognuno ha accesso completamente separati al file, con le loro lettura e scrittura puntatori, e lo faranno solo se entrambi interagiscono scrittura allo stesso file.

Ma quando un fork di processo (2) 's, quindi il padre e figlio di descrittori puntano allo stesso voce della tabella di file, e quindi condividono un'unica posizione nel file. In questo modo i processi di Unix per l'accesso alla quota di un flusso di input senza bisogno di essere a conoscenza della situazione.

tre tabelle

L'accesso ai file è incatenato attraverso tre tavoli importanti in Unix. Il Tavolo descrittore è per-process e punti per il Tabella file . Pensate alla tabella di file come tabella di file Apri . C'è una terza tabella, originariamente chiamato la tabella di inode che gestisce l'accesso ai file attuali.

La cosa fondamentale da capire è che, mentre non c'è mai più di una voce nella tabella di inode per qualsiasi file uno, ci può o non può essere più voci nella tabella di file. Se un descrittore di file viene creato con open (2) quindi l'inode ottiene una nuova voce della tabella di file, ma se è stato creato con la forcella (2), allora la stessa voce della tabella file viene riutilizzato e puntatori di lettura e scrittura sono in comune.

Quindi, due gusci ...

Nel caso di due gusci con due finestre diverse per la tipizzazione, o due gusci l'esecuzione di script diversi, quindi non usano lo stesso file a tutti, o se è lo stesso copione, è stato aperto due volte in modo le loro posizioni sono indipendente. Entrambi possono essere descrittore di file "0" all'interno di ciascun processo, ma questo è perché ogni processo ha la propria tabella descrittore.

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