Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Exemplu de Program Folosind Sistemul de Fisiere Apeluri

linux


Exemplu de Program Folosind Sistemul de Fisiere Apeluri

In aceasta parte vom examina un program simplu UNIX care copiaza un fisier din fisierul sursa catre un fisier destinatie.Este prezentat in Figura 6-5.Programul are o functionalitate minima si chiar raportul erorii,dar da o idée foarte buna despre modul in care unele din sistemele de apeluri functioneaza in legaturile cu fisierele.



Programul,care poate fi numit “copiator de fisiere”,se realizeaza pe linia:

Copyfile abc xyz

Pentru a copia fisierul “abc” la “xyz”.Daca “xyz”exista,acesta va fi rescris.Altfel a 313c28d cesta va fi creat.Programul va trebui sa fie declarat cu exact 2 argumente,cele 2 nume ale fisierelor.

Cele patru linii #include de la inceputul programului includ un numar mare de definitii si tipuri de prototipuri de functii din program.Programul trebuie sa fie conform cu standardele internationale,dar vom avea si functii in plus.Urmatoarea linie este o functie asemanatoare cu “main”,cerut de ANSI C,dar deasemenea neimportant pentru interesul nostru.

Prima declaratie “#define” este o macro definitie care declara BUF_SIZE string pentru a defini un numar mai mare de 4096 de caractere.Programul va citi si va scrie in grupuri de 4096 de bytes.Este considerata o buna programare sa dai nume constantelor si sa folosesti nume in locul constantelor.Nu numai ca aceasta conventie face acest program sa fie mai usor de citit,dar il face si mai usor de controlat.A doua declaratie “#define” determina cine poate accesa la fisierul de iesire.

Fisierul de baza este denumit “main”,si are 2 argumente,argc si argv.Acestea sunt furnizate de sistemul de operatii cand programul este apelat.Prima da numarul de siruri de caractere “string” care este prezent pe linia de comanda invocate in program,inclusive numele programului.Ar trebui sa fie 3.Al doilea este o matrice de pointeri.In exemplul de apel dat mai jos elementele acestei matrici vor contine pointeri pentru urmatoarele valori :

argv[0]=”copyfile”

argv[1]=”abc”

argv[2]=”xyz”

Trebuie ca prin aceasta matrice programul sa apeleze argumentele.

Cinci variabile sunt declarate.Primele doua,in_fd si out_fd,care contin fisierul de descriptori,numere intregi returnate cand un fisier este deschis.Urmatoarele 2,rd_count si wd_count,sunt biti returnati de sistemul de apeluri de citire si respectiv de scriere.Ultimul,buffer,este bufferul folosit pentru a inregistra datele citite si a furniza pe cele care trebuie citite.

Prima linie de declaratii verifica daca arge este 3.Daca nu il gasim cu codul 1.Orice alt status decat 0 inseamna ca a avut loc o eroare.

/*programul fisierului de copiere.Verificarea erorii si raportarea minimului.*/

#include <sys/types.h>      /*include headerul de fisier necesar*/

#include <fcntl.h>

# include <stdlib.h>

# include <unistd.h>

int main(int arge,char *argv[]);      /*prototipul ANSI*/

#define BUF_SIZE 4096      /*foloseste un buffer de 4096 de bytes*/

#define OUTPUT_MOVE 0700      /*biti de protectie pt.fisier de iesire*/

Int main(int argc,char *argv[])

/* Inchide fisierele */

Close(in_fd);

Close (out_fd);

If (rd_count ==o) /*nicio eroare la ultima citire*/

Exit(0);

Else

Exit(5); /*eroare la ultima citire*/

Codul de status este singura eroare care apare in acest program.Versiunea de productie trebuie sa afiseze mesajul de eroare deasemenea.

Apoi vom incerca sa deschidem fisierul sursa si sa cream fisierul destinatie.Daca fisierul sursa este deschis,sistemul asociaza un numar intreg la in_fd,pentru a identifica fisierul.Apelurile ulterioare trebuie sa include numarul intreg pentru ca sistemul sa stie ce fisier isi doreste.Similar daca destinatia este corect creata,lui out_fd i se asociaza o valoare pentru a-l identifica.Al doilea argument al lui creat seteaza modul de protectie.Daca totusi deschiderea sau creerea nu se realizeaza,descriptorul de fisier corespunzator este setat la -1,si programul are loc cu un cod eroare.

Apoi vine saltul de copiere.Acesta incepe prin citirea in 4 kb de informatie pana la buffer.Acest lucru se realizeaza prin apelarea procedurii read,care cere sistemul de citire al apelului.Primul parametru identifica fisierul,al doilea da buffer –ul si cel de-al treilea ne spune cati biti trebuie cititi.Valoarea asociata la rd_count da numarul de biti care sunt cititi de fapt.Normal acesta va fi 4096,exceptand daca mai putin biti raman in fisier.Cand se ajunge la sfarsitul fisierului acesta va fi 0.Daca rd_count este 0 sau negative,copierea nu se mai poate continua,si astfel declaratia de oprire este executata pentru a incheia saltul (altfel nelimitat).

Apelul scrie iesirile si buffer-ul pentru fisierul destinatie.Primul parametru identifica fisierul,al doilea da buffer-ul,iar al treilea ne spune cati biti trebuie scrisi,analog ca la citire.Bitii numarati sunt este de fapt numarul de biti de fapt cititi,nu BUF_SIZE.Acest lucru este important deoarece citirea dorita nu va fi 4096,numai daca se intampla ca fisierul sa fie un multiplu de 4 kb.

Cand intreg fisierul a fost prelucrat,primul apel inainte de sfarsitul fisierului va returna 0 la rd_count,ceea ce va duce la iesirea din salt.In acest moment cele doua fisiere vor fi inchise si se va iesi din program cu un status ce indica terminarea lui normala.

Cu toate ca sistemul de apeluri Windows este diferit de cel de la UNIX,structura generala a liniei de comanda a programului de copiere a unui fisier Windows este foarte asemanator cu cel din figura 6-5.Vom studia apelurile Windows 2000 in capitolul 11.


Document Info


Accesari: 771
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )