Pentru a obține accesul programului la informațiile conținute în fișier, este în primul rând necesar să creați un descriptor de fișiere, care în viitor va fi un "reprezentant" al acestui fișier în diferite operații pentru a extrage și scrie informații despre el. Dar, înainte de a putea efectua diverse manipulări cu conținutul fișierului, acesta trebuie deschis și după ce ați terminat lucrul cu acesta - acesta este închis. De obicei, în toate limbile de programare, descriptorul de fișiere (alte limbi pot folosi termeni diferiți pentru mecanismul referinței unui fișier, pe care îl numim un mâner în Perl) este creat simultan cu deschiderea fișierului. În Perl, în aceste scopuri, funcția standard orum () este o operație de listă. Apelul său poate avea trei forme diferite: primele două forme ale operațiunii deschise deschid un fișier cu un nume egal cu valoarea parametrului FILE_NAME reprezentat fie de un șir, fie de o expresie a cărei valoare ar trebui să fie un șir. Aceasta creează și asociază cu fișierul descriptorul său, al cărui nume este definit de parametrul DESCRIPTOR. Acest parametru trebuie să reprezinte identificatorul Perl corect (o secvență de caractere alfanumerice începând cu o literă), dar poate fi, de asemenea, o expresie. În acest caz, valoarea calculată a expresiei trebuie să fie, de asemenea, un identificator valabil. Operația deschisă fără un nume de fișier deschide un fișier al cărui nume este conținut în variabila scalară $ DESCRIPTOR, creând pentru el un descriptor definit de parametrul DESCRIPTOR. Rețineți că o variabilă care conține numele fișierului deschis nu poate fi o variabilă lexicală locală, definită de funcția mea (). Extragerea 6.6 demonstrează utilizarea operației open () pentru a deschide fișierele. (În timp ce nu am introdus conceptul de mod open file, presupunem că toate fișierele sunt deschise doar pentru citire.) Listing 6.6. Diferite forme ale operației deschise de deschidere a fișierelor Rețineți că în toate instrucțiunile de deschidere a fișierelor este verificată valoarea returnată a funcției deschise, care este egală cu "adevărat" dacă fișierul este deschis și cu alte cuvinte "false". Și dacă a apărut o eroare, se numește funcția standard die (), care imprimă mesajul și oprește execuția scriptului. Se consideră de obicei că eroarea de deschidere a unui fișier este atât de gravă încât programul nu poate fi executat în continuare. Dacă nu este cazul în cazul dvs., puteți verifica (și acest lucru este recomandat întotdeauna!) Revenit de la funcția deschis și să ia măsurile necesare în programul în sine.
NOTĂ Dacă nu este specificat numele complet al fișierului, fișierul cu numele specificat este deschis și localizat în directorul curent activ. Puteți specifica numele de fișier complet (a se vedea a treia instrucțiune deschisă din Listing 6.6), dar rețineți că depinde de sistemul de operare pe care îl utilizați. De exemplu, în Windows, trebuie să specificați întotdeauna numele unității d: /perl/bin/perl.bat, cu excepția cazului în care fișierul se află pe discul curent activ. Numărul de fișiere deschise în program depinde de sistemul de operare utilizat. De exemplu, într-un sistem UNIX puteți deschide un număr destul de mare de fișiere, în timp ce în DOS și Windows numărul de fișiere deschise depinde de valoarea setată a variabilei de mediu FILES (de la unu la 255) și variază de la 20 la 50 de fișiere simultan deschise.
NOTĂ Unele sisteme de operare vă cer să setați pointerul de citire / scriere a fișierului atunci când treceți de la operațiile de citire la operațiile de scriere. În Perl, funcția seek () este destinată acestui scop, o descriere a cărei descriere va fi dată ulterior în această secțiune. La deschiderea fișierului în citire / scriere prin Oren () în formă de unul și doi parametri care corespunde secvenței de simboluri trei moduri posibile trebuie adăugate ca un prefix la numele de fișiere permise între ele și numele fișierelor număr arbitrar de lacune, de exemplu, " +> file.dat ".
Deschiderea unui fișier și crearea unui descriptor pentru acesta cu funcția open () este o modalitate bună și convenabilă de a seta modul de lucru cu un fișier și, de asemenea, dacă aveți nevoie să creați un fișier nou. Cu toate acestea, caracteristicile acestei funcții nu permit setarea drepturilor de acces pentru fișierele nou create, care este caracteristica lor importantă în sistemul UNIX (a se vedea nota de mai jos), și rezolvă, de asemenea, problema dacă să creați un fișier dacă acesta nu există.
NOTĂ În UNIX, pentru fiecare fișier, drepturile de acces sunt definite pentru proprietarul fișierului (utilizatorul care la creat), pentru grupul de utilizatori la care aparține proprietarul fișierului și pentru toți ceilalți utilizatori. Aceste drepturi sunt pentru fiecare dintre aceste grupuri includ dreptul de a citi un fișier, scrie acces la dosar și dreptul de a executa fișierul, a prezentat un număr binar de trei biți, care este ușor de interpretat ca un numar octal: valoarea 4 specifică dreptul de a citi, 2 - pentru scriere și 1 pentru execuție. Restul cifre octale până la 7 inclusiv reprezintă o combinație de drepturi de acces. De exemplu, valoarea 6 determină permisiunile de citire și scriere (4 + 2 = 6). Astfel, pentru fiecare dintre aceste grupuri de utilizatori (proprietarul fișierului, utilizatorii săi, și toate celelalte grupuri) folosind numărul octal zero-șapte pot fi setate toate combinațiile posibile ale drepturilor de acces, care de obicei este reprezentat ca un număr octal format din trei cifre. De exemplu, valoarea 0666 (zero, nu determină nimic, ci servește doar ca un indicator, care este un număr octal) raportează că fișierul definește drepturile de a citi și scrie, dar nu pentru a efectua, pentru toate cele trei grupuri de potențiali utilizatori.
Funcția deschisă () creează fișiere cu valoarea drepturilor de acces, egal cu 0666. Pentru „subțire“ pentru a deschide fișiere cu rezoluție de creare de fișiere, în lipsa acestuia, cu indicarea drepturilor de acces la fișierul nou creat, și așa mai departe. n. Funcția trebuie în loc deschis (), care este o interfață pentru funcțiile respective ale standardului limbii de bibliotecă stdio C, utilizați standardul sysopen Perl (), apelând direct la (sistemul de operare) deschis și permite programatorului să specifice componentele individuale ale modului de operare cu fișierul: citit, scrie, cos Întreținerea, adăugarea, ștergerea conținutului etc. Acest apel funcție este după cum urmează: în cazul în care parametrul nume de fișier este un mod de parametru numele fișierului determină modul de fișier deschis și este un număr care este rezultatul la nivel de bit OR (|) privind modul constant specificat .. în modulul Fcntl. Compoziția constantelor disponibile depinde de sistemul de operare. În tabel. 6.1 afișează constantele modurilor care apar în aproape toate sistemele de operare. Tabelul 6.1. Constantele cele mai comune ale modului de acces la fișiere
Ștergerea conținutului unui fișier
Pentru a accesa lista din Tabel. 6.1 numite constante de mod, trebuie să conectați modulul standard Fcntl cu ajutorul operatorului Fcntl; care este de obicei scris la începutul programului. Parametrul opțional RESOLUTION definește drepturile de acces la fișierul creat în sistemul UNIX și este specificat sub forma unui număr octal. Rețineți că atunci când se determină drepturile de acces reale la fișier, se ia în considerare și valoarea curentă a măștii de acces la proces, în care se execută scriptul specificat de funcția umask (). Dacă nu este specificată opțiunea PERMISIE, atunci Perl Perl utilizează valoarea 0666.
SFAT Dacă aveți dificultăți în stabilirea drepturilor de acces, urmați regula: pentru fișierele obișnuite, transferați 0666, iar pentru directoarele și fișierele executabile - 0777.
Odată cu deschiderea fișierelor cu funcția open (), împreună cu apelurile echivalente la funcția sysopen (), consultați Listing 6.7. Listing 6.7. Deschiderea fișierelor Când deschideți un fișier, funcțiile open () și sysopen () returnează valoarea 0 dacă fișierul este deschis în modul specificat, iar valoarea undef este altfel undef. Permiteți-mi să vă reamintesc din nou că trebuie să verificați întotdeauna succesul operației de deschidere a unui fișier, oprind executarea programului cu funcția die (). În mesajul afișat al funcției die (), puteți utiliza variabila specială $. în care este stocat mesajul de sistem sau codul de eroare. Aceste informații ajută la detectarea și corectarea erorilor din program. De exemplu, în cazul în care $ fișierul variabil operatorul conține numele unui fișier inexistent, atunci când sunt executate, utilizatorul poate vedea următorul mesaj: Pentru a completa descrierea lucrului cu funcția deschisă () trebuie spus că, dacă numele fișierului este șirul „-“, apoi deschideți corespunde fișier dispozitiv de intrare standard cu un descriptor STDIN. Valoarea egală cu șirul "> -" corespunde ieșirii la dispozitivul de ieșire standard cu descriptorul STDOUT.