elegxos an ena file einai anoikto

Aggelos Economopoulos aoiko at cc.ece.ntua.gr
Sun Feb 23 10:28:01 EET 2003


On Friday 21 February 2003 14:18, tc wrote:
> Γεία,
>
> Γράφω ένα πρόγραμμα που μία από τις δουλείες του
> είναι να διαβάζει αρχεία από ένα υποκατάλογο και να
> τα διαγράφει.
> Το πρόβλημα που έχω είναι ότι τα αρχεία αυτά
> μπορεί να μην μεταφέρονται στον υποκατάλογο αυτο ατομικά
> (π.χ. με rename) αλλά να αντιγράφονται μη ατομικά
> π.χ. fopen while  fwrite ktl
> Πρώτη σκέψη που έκανα ήταν να τα κάνω rename σε κάποιο άλλο κατάλογο στο
> ίδιο fs πρότού αρχίσει το πρόγραμμα μου τα ανοίξει και τα διαβάζει.
> Ξέρει κανείς αν αυτος ο τρόπος είναι ασφαλες σε solaris, linux, *bsd κτλ
> σε τοπικό fs ή σε nfs ; (Ασφαλές εννόω να είναι πλήρες το αρχείο).

"Να είναι πλήρες" το αρχείο που διαγράφεις. Μερικές φορές έχω την εντύπωση 
ότι η lgu είναι ένα ατελείωτο turing test στο οποίο δεν υπάρχει /ποτέ/ 
άνθρωπος[0] από την άλλη πλευρά.

*Άν* εννοείς ότι θες να είσαι σίγουρος πως "αν διαγράψεις ένα αρχείο ενώ 
κάποιο άλλο process γράφει σε αυτό, τότε τα υπόλοιπα write()s αυτού του 
process δεν θα ξαναδημιουργήσουν αυτό το αρχείο", ναι, να είσαι σίγουρος. 
Το unlink απλά αφαιρεί την directory entry και δεν επηρεάζει τους file 
descriptors που είναι ήδη ανοικτοί για το αρχείο. Εκτός βέβαια και άν το 
πρόγραμμα που γράφει στο αρχείο είναι τόσο brain-dead που ξαναανοίγει το 
αρχείο με O_CREAT για κάθε write() (μπορείς να είσαι σίγουρος ότι κανένα 
standard utility δεν κάνει τέτοιες αηδίες).

Obligatory sus excerpt:
When the file's link count becomes 0 and no process has the file open, the 
space occupied by the file shall be freed and the file shall no longer be 
accessible. If one or more processes have the file open when the last link 
is removed, the link shall be removed before unlink() returns, but the 
removal of the file contents shall be postponed until all references to the 
file are closed.

[0] και συνήθως αυτό που υπάρχει δεν είναι *καν* κάποια υποψήφια τεχνητή 
νοημοσύνη :>



More information about the Linux-greek-users mailing list