Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*******************************************************************************************************
- Enunt prima problema:
- a) Care este semnificatia celui de-al treilea argument al functiei fcntl in cazul in care este apelata cu modul F_SETLK?
- b) Scrieti fragmentul de cod pentru apelul care pune un blocaj in scriere pe descriptorul de fisier fd incepand cu pozitia 100 fata de inceputul fisierului,
- pe o lungime de 10 octeti. Se presupune ca fd exista deja (nu e necesar sa il declarati, deschideti, etc).
- NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
- *******************************************************************************************************/
- Enunt a doua problema:
- Programul de mai jos contine trei erori sintactice (adica, detectabile la compilare), si ar trebui sa ofere
- urmatoarea functionalitate: citeste numerele aflate in fisierul specificat prin primul argument de la linia de
- comanda, calculeaza valoarea factorialului pentru fiecare numar si il scrie in fisierul specificat prin al doilea argument.
- Corectati in programul de mai jos cele trei erori introduse voluntar in asa fel incat sa obtineti un program corect.
- Dupa linia pe care ati facut o corectie, includeti si o explicatie ca si comentariu pentru a obtine punctajul integral.
- NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
- ***************************************************************************************************
- #include<stdio.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- int factorial(int);
- int main( int argc, char *argv[] )
- {
- int fd1, fd2;
- int n,fact;
- if ( argv < 3)
- // nu este corect argv<3 pt ca se cer 2 argumente
- {
- perror( "not sufficient arguments" );
- return -4;
- }
- if ( (fd1=open( argv[1], O_RDONLY)) == -1 )
- {
- perror( "could not open file specified in first argument\n" );
- return -3;
- }
- if ( (fd2=open( argv[2], O_WRONLY | O_CREATE,0600 )) == -1 )
- //este gresit O_CREATE if( (fd2=open( argv[2], O_WRONLY | O_CREATE,0600 )) == -1 ) este corect O_CREAT
- {
- perror( "could not open file specified in second argument\n" );
- return -2;
- }
- while ( read( fd1,&n, sizeof(int) )> 0 )
- {
- fact=factorial(n);
- write( fd2,&fact, sizeof(int) );
- }
- close( fd1 );
- return 0;
- }
- int factorial(int nr)
- {
- int i, f=1;
- for (i = 2;i<=nr;i++)
- f=f*i;
- return f;
- }
- *******************************************************************************************************/
- /*******************************************************************************************************
- Enunt a treia problema:
- Sa se scrie un program C care va crea 2 procese fii si va citi o secventa
- de N numere de la tastatura. Procesul initial, P0, va transmite fiecaruia dintre
- cele 2 procese fii, P1 si P2, cate jumatate din secventa de numere. Fiecare proces
- fiu va calcula media aritmetica a numerelor din secventa primita si va
- transmite valoarea calculata procesului parinte. Procesul P0 va afisa
- media aritmetica a valorilor primite de la cele doua procese fii.
- Comunicarea intre procese se va realiza prin intermediul a 3 canale de comunicatie
- interna astfel: se vor utiliza doua canale de comunicatie pentru transmiterea datelor
- de la procesul parinte catre procesele fii, cate unul pentru fiecare proces fiu,
- si un al treilea canal de comunicatie pentru transmiterea datelor de la procesele
- fii catre procesul parinte.
- Fiecare proces va afisa identitatea sa si pe cea a procesului parinte.
- Se vor trata toate cazurile de exceptie ce pot apare.
- NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
- *******************************************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement