Molti file system funzionano con un sistema di conteggio dei riferimenti per i file.
~/foo$ ls -l
total 312
-rwxr-xr-x 2 shagie staff 14884 Jan 24 10:35 a.out*
-rwxr-xr-x 1 shagie staff 379 Apr 10 13:56 alias.pl*
-rw-r--r--@ 1 shagie staff 14236 Apr 10 13:50 aliases.csv
-rwxr-xr-x 2 shagie staff 14884 Jan 24 10:35 b.out*
-rw-r--r-- 1 shagie staff 137 Feb 17 15:30 f.pl
-rwxr-xr-x 1 shagie staff 616 Mar 24 15:19 file*
Hai le autorizzazioni e poi il conteggio dei riferimenti. Nota che a.out e b.out sono lo stesso file. Una volta eliminati tutti i riferimenti a un file, è possibile recuperarli. Ma i file e le directory sono diversi.
In POSIX, hai i file che vengono rimossi da unlink, che li rimuove da una voce di directory.
The unlink function deletes the file name filename. If this is a file's sole name, the file itself is also deleted. (Actually, if any process has the file open when this happens, deletion is postponed until all processes have closed the file.)
E tu hai le directory che sono state rimosse con rmdir.
The rmdir function deletes a directory. The directory must be empty before it can be removed; in other words, it can only contain entries for .
and ..
.
Questi sono controlli separati e rmdir
non può rimuovere un file, né unlink
può rimuovere una directory. Questo è solo il modo in cui funziona.
Questo rende il codice molto più semplice e meno messaggi di errore coinvolti. Una funzione fa una sola cosa. Da È corretto suddividere funzioni e metodi lunghi in quelli più piccoli anche se non verranno chiamati da nessun'altra parte?
If, when describing the activity of the code to another programmer you use the word 'and', the method needs to be split into at least one more part.
Affinché rmdir si comporti in questo modo, la descrizione sarà:
Remove the directory entry, and any files if any are contained within the directory.
Nota and
. Rmdir non atomico significa che ci sono molte altre situazioni in cui un processo parziale potrebbe essere fatto senza dire chiaramente se è stato fatto o meno. Se premi file che non puoi eliminare come parte dell'ipotetico rmalldir
è un successo? fallimento? quale messaggio di errore?
E così, ogni chiamata di funzione fa una sola cosa: rimuovere un file. rimuovere una directory. Qualsiasi errore è specificamente applicabile a tale operazione.
Il codice è più semplice e ci sono meno possibilità di errore in biblioteca o persone che usano la libreria.