Έλεγχος για rotation log αρχείου

George Notaras gnot at g-loaded.eu
Wed Sep 16 21:01:37 EEST 2009


Giorgos Keramidas wrote:
> 
> Η αλήθεια είναι ότι κι η stat() έχει το δικό της σετ από «προβλήματα»,
> αφού δε σου εγγυάται κανείς ότι δε θα γίνει κάτι σαν:
> 
>     Το Πρόγραμμά Σου                         Κάποιος άλλος
> 
>              |                                    |
>              |                                    |
>              +-- fd = os.open(path)               |
>              |                                    |
>              |                                    +-- rename(path, path2)
>              |                                    |
>              |                                    |
>              +-- stat(path)                       |
>              |                                    |
>              |                                    |
>              |                                    +-- rename(path2, path)
>              |                                    |
>              |                                    |
>              v                                    v
> 
>             now                                  now
> 
> Σε αυτό το σημείο εσύ «πιστεύεις» ότι το αρχείο άλλαξε, αλλά μετά το
> δεύτερο rename() το "path" αναφέρεται πάλι στο ίδιο ακριβώς i-node.
> 
> Επειδή αυτό είναι μια κάπως παθολογική περίπτωση, μπορείς να προσθέσεις
> ένα ακόμα έλεγχο *αφού* ξανανοίξεις το αρχείο, κι αν όντως είναι το ίδιο
> με το αρχικό file πριν τα 2 rename() calls, να ελέγξεις αν έχει ακόμα
> μέγεθος >= αρχικό μέγεθος και να κάνεις seek εκεί που ήσουνα αρχικά.
> 
> Αλλά τώρα πια ξεφεύγουμε από το τι είναι ένα "log file tail mode" και τι
> πρέπει να κάνει το tail-like πρόγραμμα και ασχολούμαστε με γενικότερα
> stat()-based race conditions, με τα οποία οποιοδήποτε πρόγραμμα μπορεί
> να την πατήσει.
> 
> 

Thanks που τα αναφέρεις. Καλό είναι να λαμβάνει κανείς όλες τις
περιπτώσεις. Δεν ήξερα ότι με το rename(path2, path) to path αναφέρεται
στο αρχικό i-node.


More information about the Linux-greek-users mailing list