Έλεγχος για 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