-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[14] Come mai quando apro un file in lettura e scrittura il suo contenuto viene eliminato? clobber lettura-scrittura clobbering truncate truncating

Perché state utilizzando qualcosa di simile a quanto di seguito indicato, che tronca il file e poi vi consente l'accesso ad esso in lettura e scrittura:

    open(FH, "+> /percorso/nome");	# SBAGLIATO (quasi sempre)

Ops. Dovete invece utilizzare questo, che causerà un errore se il file non esiste.

   open(FH, "+< /percorso/nome");  	# apre per aggiornare

L'utilizzo di ">" cancella il contenuto in ogni caso, o crea il file. L'utilizzo di "<" non fa mai nessuna delle due cose. Il "+" non cambia questo comportamento.

Di seguito sono riportati degli esempi di vari tipi di apertura di file. Quelli che utilizzano sysopen() presuppongono:

    use Fcntl;

Per aprire un file in lettura:

    open(FH, "< $percorso")                                || die $!;
    sysopen(FH, $percorso, O_RDONLY)                       || die $!;

Per aprire un file in scrittura, creando se necessario il nuovo file oppure troncando quello vecchio:

    open(FH, "> $percorso") || die $!;
    sysopen(FH, $percorso, O_WRONLY|O_TRUNC|O_CREAT)       || die $!;
    sysopen(FH, $percorso, O_WRONLY|O_TRUNC|O_CREAT, 0666) || die $!;

Per aprire un file in scrittura, creando un nuovo file che non deve già esistere:

    sysopen(FH, $percorso, O_WRONLY|O_EXCL|O_CREAT)         || die $!;
    sysopen(FH, $percorso, O_WRONLY|O_EXCL|O_CREAT, 0666)   || die $!;

Per aprire un file per aggiungere dati, creandolo se necessario:

    open(FH, ">> $percorso") || die $!;
    sysopen(FH, $percorso, O_WRONLY|O_APPEND|O_CREAT)       || die $!;
    sysopen(FH, $percorso, O_WRONLY|O_APPEND|O_CREAT, 0666) || die $!;

Per aprire un file, che deve già esistere, per aggiungere dati:

    sysopen(FH, $percorso, O_WRONLY|O_APPEND)                || die $!;

Per aprire un file, che deve già esistere, per aggiornarlo:

    open(FH, "+< $percorso")                                 || die $!;
    sysopen(FH, $percorso, O_RDWR)                           || die $!;

Per aprire un file per aggiornarlo, creandolo se necessario:

    sysopen(FH, $percorso, O_RDWR|O_CREAT)                   || die $!;
    sysopen(FH, $percorso, O_RDWR|O_CREAT, 0666)             || die $!;

Per aprire un file, che non deve già esistere, per aggiornarlo:

    sysopen(FH, $percorso, O_RDWR|O_EXCL|O_CREAT)           || die $!;
    sysopen(FH, $percorso, O_RDWR|O_EXCL|O_CREAT, 0666)     || die $!;

Per aprire un file senza bloccare, creandolo se necessario:

    sysopen(FH, "/tmp/unfile", O_WRONLY|O_NDELAY|O_CREAT)
	    or die "non riesco ad aprire /tmp/unfile: $!":

Sappiate che né la creazione né la cancellazione dei file sono garantite essere operazioni atomiche quando si lavora su NFS. Due processi potrebbero infatti creare o cancellare lo stesso file con successo! Dunque O_EXCL non è così esclusivo come potreste volere.

Consultate anche anche il nuovo perlopentut se ne siete in possesso (nuovo nella versione 5.6).

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google