indietro

  • sysopen FILEHANDLE,NOMEFILE,MODALITÀ
  • sysopen FILEHANDLE,NOMEFILE,MODALITÀ,PERMESSI

    Apre il file il cui nome è dato da NOMEFILE e lo associa a FILEHANDLE. Se FILEHANDLE è un'espressione, il suo valore viene usato come nome del vero filehandle che occorre. Questa funzione richiama la funzione open del sistema operativo sottostante, con i parametri NOMEFILE, MODALITÀ, PERMESSI.

    I possibili valori e i bit di flag del parametro MODALITÀ sono dipendenti dal sistema; sono disponibili mediante il modulo standard Fcntl. Consultate la documentazione della open del vostro sistema operativo per rendersi conto di quali valori e bit di flag sono disponibili. Potete mettere assieme diversi flag utilizzando il |-operatore.

    Alcuni dei più comuni valori sono O_RDONLY per aprire il file in modalità di sola lettura, O_WRONLY per aprire il file in modalità di sola scrittura e O_RDWR per aprire il file in modalità di lettura-scrittura.

    Per ragioni storiche, alcuni valori funzionano su pressoché tutti i sistemi supportati dal perl: zero significa di sola lettura, uno significa di sola scrittura e due significa lettura/scrittura. Si è a conoscenza che questi valori non funzionano sotto OS/390 & VM/ESA Unix e sul Macintosh; è probabile che non vogliate usarli in nuovo codice.

    Se il file fissato da NOMEFILE non esiste e la chiamata open lo crea (tipicamente perché MODALITÀ include il flag O_CREAT), allora il valore di PERMESSI specifica i permessi del file appena creato. Se a sysopen omettete l'argomento PERMESSI, il Perl utilizza il valore ottale 0666. Questi valori dei permessi devono essere in ottale e sono modificati dall'umask del processo corrente.

    Su molti sistemi, il flag O_EXCL è disponibile per aprire i file in modalità esclusiva. Questo non è eseguire un lock: l'esclusività significa in questo contesto che se il file esiste già, sysopen() fallisce. O_EXCL potrebbe non funzionare su filesystem di rete e non ha effetto a meno che venga impostato anche il flag O_CREAT. Impostare O_CREAT|O_EXCL impedisce che il file venga aperto se è un link simbolico. Questo non offre protezione ai link simbolici nel percorso del file.

    Talvolta potreste voler troncare un file già esistente. Questo può essere fatto utilizzando il flag O_TRUNC. Il comportamento di O_TRUNC con O_RDONLY è indefinito.

    0644 come argomento di sysopen andrebbe usato raramente, se non mai, poiché toglie all'utente la possibilità di avere una umask più permissiva. È meglio ometterlo. Consultate la voce perlfunc(1) su umask per maggiori dettagli.

    Va notato che sysopen dipende dalla funzione di libreria C fdopen(). Su molti sistemi UNIX, fdopen() è nota per fallire quando i descrittori dei file eccedono un certo valore, tipicamente 255. Se avete bisogno di più descrittori di file, considerate la possibilità di ricompilare il Perl in maniera che possa utilizzare la libreria sfio o forse usando la funzione POSIX::open().

    Consultate perlopentut per una gentile, garbata spiegazione sul come aprire i file.