GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa succede a un handle di file aperto su Linux se il file puntato viene spostato o eliminato

Se il file viene spostato (nello stesso filesystem) o rinominato, l'handle del file rimane aperto e può ancora essere utilizzato per leggere e scrivere il file.

Se il file viene eliminato, l'handle del file rimane aperto e può ancora essere utilizzato (questo non è ciò che alcune persone si aspettano). Il file non verrà effettivamente eliminato finché l'ultimo handle non sarà chiuso.

Se il file viene sostituito da un nuovo file, dipende esattamente da come. Se il contenuto del file viene sovrascritto, l'handle del file sarà ancora valido e accederà al nuovo contenuto. Se il file esistente è scollegato e ne viene creato uno nuovo con lo stesso nome o, se un nuovo file viene spostato nel file esistente utilizzando rename() , equivale all'eliminazione (vedi sopra), ovvero l'handle del file continuerà a fare riferimento all'originale versione del file.

In generale, una volta che il file è aperto, il file è aperto e nessuno che modifica la struttura della directory può cambiarla:può spostare, rinominare il file o inserire qualcos'altro al suo posto, semplicemente rimane aperto.

In Unix non c'è nessuna cancellazione, solo unlink() , il che ha senso in quanto non elimina necessariamente il file, rimuove solo il collegamento dalla directory.

Se d'altra parte il dispositivo sottostante scompare (ad es. Disconnessione USB), l'handle del file non sarà più valido ed è probabile che dia IO/errore su qualsiasi operazione. Devi ancora chiuderlo però. Questo sarà vero anche se il dispositivo viene ricollegato, poiché in questo caso non è ragionevole tenere aperto un file.


Gli handle di file puntano a un inode non a un percorso, quindi la maggior parte dei tuoi scenari funziona ancora come presumi, poiché l'handle punta ancora al file.

In particolare, con lo scenario di eliminazione - la funzione è chiamata "unlink" per un motivo, distrugge un "collegamento" tra un nome file (un'dentatura) e un file. Quando apri un file e poi lo scolleghi, il file esiste ancora fino a quando il suo conteggio dei riferimenti non va a zero, ovvero quando chiudi l'handle.

Modifica: Nel caso dell'hardware, hai aperto un handle a un nodo di dispositivo specifico, se scolleghi il dispositivo, il kernel fallirà tutti gli accessi ad esso, anche se il dispositivo ritorna. Dovrai chiudere il dispositivo e riaprirlo.


Non sono sicuro delle altre operazioni, ma per quanto riguarda l'eliminazione:l'eliminazione semplicemente non avviene (fisicamente, cioè nel file system) fino a quando l'ultimo handle aperto del file non viene chiuso. Pertanto non dovrebbe essere possibile eliminare un file dall'applicazione.

Alcune app (che non mi vengono in mente) si basano su questo comportamento, creando, aprendo ed eliminando immediatamente i file, che poi vivono esattamente quanto l'applicazione, consentendo ad altre applicazioni di essere a conoscenza del ciclo di vita della prima app senza bisogno di guarda le mappe dei processi e simili.

È possibile che considerazioni simili si applichino alle altre cose.


Linux
  1. Linux:quali sono i diversi modi per impostare i permessi dei file ecc. su Gnu/linux?

  2. Cosa succede esattamente quando eseguo un file nella shell?

  3. Linux:cosa significa un punto dopo i bit di autorizzazione del file?

  4. Linux:cosa succede quando esegui la sincronizzazione senza un percorso di destinazione??

  5. Qual è lo scopo del file .bashrc in Linux

Cos'è umask in Linux?

Che cos'è la shell in Linux?

Che cos'è il file .bashrc in Linux?

I 10 strumenti di navigazione dei file open source per il sistema Linux

Cosa succede quando un file che è stato impaginato al 100% nella cache della pagina viene modificato da un altro processo

Qual è il comando per copiare, leggere e rimuovere file in Linux