elegxos an ena file einai anoikto

tc tasosc at otenet.gr
Mon Feb 24 00:31:01 EET 2003


Aggelos Economopoulos wrote:
> 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] από την άλλη πλευρά.

Get a life(tm).

> 
> *Άν* εννοείς ότι θες να είσαι σίγουρος πως "αν διαγράψεις ένα αρχείο ενώ 
> κάποιο άλλο process γράφει σε αυτό, τότε τα υπόλοιπα write()s αυτού του 
> process δεν θα ξαναδημιουργήσουν αυτό το αρχείο", ναι, να είσαι σίγουρος. 

Μα είμαι σιγουρος για αυτο. Δεν με απασχολεί σε αυτη την περιπτώση.

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

Οχι δεν εννοουσα κατι τετοιο. Ισως έγραψα το e-mail λίγο βιαστικά.
Με πλήρες αρχείο εννοώ ότι το αρχείο έχει γραφτεί στον υποκατάλογο Α 
100% , είτε με ατομικό τρόπο είτε το πρόγραμμα που το έχει αντιγράψει 
εχει γράψει τι είναι να γράψει και το έχει κλείσει.
<παράδειγμα>
Για παράδειγμα σκέψου ένα RIP πρόγραμμα που ελέγχει ένα κατάλογο
για αγνώστου τύπου αρχεία.  Όταν βρίσκει αρχεία εκεί τα διαβάζει ,
τα εκτυπωνει και τα διαγράφει.
Ωραία ;
Στην ιδανική περίπτωση τα προγράμματα που αντιγράφουν αρχεία στον κατάλογο
αυτόν είτε θα το κάνανε ατομικά είτε με κάποιο είδους κλειδώματος.
Επειδή δεν μπορούμε να υποθέσουμε κάτι τέτοιο και τα αρχεία μπορεί να 
αντιγράφονται με ftp από την άλλη άκρη της γης πρέπει να υπάρχει τρόπος 
να ξέρουμε αν το αρχείο που βρίσκεται σε αυτόν τον υποκατάλογο
έχει τελειώσει η αντιγραφή του. Αν έχει τελείωσει η αντιγραφή τότε το τυπώνει 
αλλιώς το αφήνει για τον επόμενο έλεγχο.
</παράδειγμα>



> 
> 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