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