2015-03-22 13 views
5

sto leggendo il libro "Sistemi Operativi di Galvin" e incontrato la seguente dichiarazione:diverse implementazioni di apertura dei file

file aperto può essere implementato in uno dei due modi:

  1. Alcuni sistema apre i file quando viene fatto riferimento per la prima volta. E li chiude, una volta che il lavoro è finito.
  2. Alcuni altri sistemi permettono ai programmatori di applicazioni per specificare un ordine così come open-read/write-vicino in applicazione stessa."

vedo programmi C con Linux/Windows segue il secondo metodo.

  • Vi sono esempi del primo metodo?
  • Perché sono quei sistemi che utilizzano il primo metodo?
+1

I sistemi mainframe IBM con JCL che specificano quali file sono connessi a quale numero di canale viene conteggiato come illustrazione della prima tecnica? –

+0

Penso che questo sia ciò a cui ci si riferisce al punto # 1. Dai tempi in cui i vecchi FORTRAN e COBOL non avevano dichiarazioni APERTE. – user3344003

risposta

0

Nel comprendere le due implementazioni e le loro pro/contro, penso che sia utile generalizzare qui:

  1. generalizzare il concetto di file di considerare davvero qualsiasi risorsa acquisita; e
  2. Generalizza da ciò che fornisce il sistema operativo, a ciò che viene fornito anche dal linguaggio di programmazione, dalle librerie o dai framework utilizzati.

Per quanto riguarda il motivo per cui i sistemi possono utilizzare il primo metodo ...

La risposta sarebbe simile applicare sul motivo per cui si consiglia di utilizzare un linguaggio di programmazione come RAII. Cioè vuoi fare la tua gestione del ciclo di vita della risorsa o vuoi farlo per te.

A volte quando la gestione del ciclo di vita è fatta per noi (noi come programmatori), potremmo perdere la capacità di fare le cose che vogliamo (cose che potrebbero altrimenti essere possibili se implementiamo noi stessi la gestione del ciclo di vita). A volte è più importante non poter perdere una risorsa piuttosto che essere in grado di accedere a tutti i campanelli e fischiettare per essa.

Prendere la gestione della memoria in C++, ad esempio. Possiamo allocare memoria dal sistema usando new o possiamo invece chiamare std::make_shared. Il primo tuttavia ci richiede di chiamare anche delete (al termine del suo utilizzo) se vogliamo garantire che la memoria non sia trapelata. Nel frattempo, Java non concede al programmatore l'accesso diretto all'assegnazione della memoria e utilizza invece la garbage collection in modo che "programmers can be spared the burden of having to perform manual memory management".

Per quanto riguarda esempi del primo metodo ...

Molti sistemi operativi Unix-like forniscono un'interfaccia di programmazione per l'impianto syslog. Mentre ha aperto e chiudi analogie analoghe in openlog e closelog, chiamarle è facoltativo. Si può semplicemente chiamare syslog per avviare il testo di registrazione del sistema.

Anche gli input e output standard sono gestiti allo stesso modo. Quando un programma si avvia, in genere ha già questi concetti aperti e disponibili.Quando esce, quei flussi saranno chiusi per noi (se necessario). I programmi non devono chiamare fclose(stdout) (né qualcosa come fopen("/dev/console")). I programmi possono chiamare semplicemente fputs o fgets utilizzando stdout o stdin.

Problemi correlati