SHARE
TWEET

Untitled

a guest May 21st, 2019 227 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*******************************************************************************************************
  2. Enunt prima problema:
  3.  
  4. a) Care este semnificatia celui de-al treilea argument al functiei fcntl in cazul in care este apelata cu modul F_SETLK?
  5. 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,
  6.  pe o lungime de 10 octeti. Se presupune ca fd exista deja (nu e necesar sa il declarati, deschideti, etc).
  7.  
  8. NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
  9. *******************************************************************************************************/
  10.  
  11. Enunt a doua problema:
  12.  
  13. Programul de mai jos contine trei erori sintactice (adica, detectabile la compilare), si ar trebui sa ofere
  14. urmatoarea functionalitate: citeste numerele aflate in fisierul specificat prin primul argument de la linia de
  15. comanda, calculeaza valoarea factorialului pentru fiecare numar si il scrie in fisierul specificat prin al doilea argument.
  16.  
  17. Corectati in programul de mai jos cele trei erori introduse voluntar in asa fel incat sa obtineti un program corect.
  18. Dupa linia pe care ati facut o corectie, includeti si o explicatie ca si comentariu pentru a obtine punctajul integral.
  19.  
  20. NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
  21. ***************************************************************************************************
  22. #include<stdio.h>
  23. #include<sys/types.h>
  24. #include<sys/stat.h>
  25. int factorial(int);
  26. int main( int argc, char *argv[] )
  27. {
  28.     int fd1, fd2;
  29.     int n,fact;
  30.  
  31.     if ( argv <  3)
  32.  
  33.     // nu este corect argv<3 pt ca se cer 2 argumente
  34.     {
  35.         perror( "not sufficient arguments" );
  36.         return -4;
  37.     }
  38.  
  39.     if ( (fd1=open( argv[1], O_RDONLY)) == -1 )
  40.     {
  41.         perror( "could not open file specified in first argument\n" );
  42.         return -3;
  43.     }
  44.  
  45.     if ( (fd2=open( argv[2], O_WRONLY | O_CREATE,0600 )) == -1 )
  46.  
  47.     //este gresit O_CREATE if( (fd2=open( argv[2], O_WRONLY | O_CREATE,0600 )) == -1 ) este corect O_CREAT
  48.     {
  49.         perror( "could not open file specified in second argument\n" );
  50.         return -2;
  51.     }
  52.  
  53.     while ( read( fd1,&n, sizeof(int) )>  0 )
  54.     {
  55.     fact=factorial(n);
  56.         write( fd2,&fact, sizeof(int) );
  57.     }
  58.  
  59.     close( fd1 );
  60.     return 0;
  61. }
  62. int factorial(int nr)
  63. {
  64. int i, f=1;
  65.  
  66. for (i = 2;i<=nr;i++)
  67.     f=f*i;
  68.  
  69. return f;
  70. }
  71.  
  72. *******************************************************************************************************/
  73.  
  74. /*******************************************************************************************************
  75. Enunt a treia problema:
  76.  
  77. Sa se scrie un program C care va crea 2 procese fii si va citi o secventa
  78. de N numere de la tastatura. Procesul initial, P0, va transmite fiecaruia dintre
  79. cele 2 procese fii, P1 si P2, cate jumatate din secventa de numere. Fiecare proces
  80. fiu va calcula media aritmetica a numerelor din secventa primita si va
  81. transmite valoarea calculata procesului parinte. Procesul P0 va afisa
  82. media aritmetica a valorilor primite de la cele doua procese fii.
  83.  
  84. Comunicarea intre procese se va realiza prin intermediul a 3 canale de comunicatie
  85. interna astfel: se vor utiliza doua canale de comunicatie pentru transmiterea datelor
  86. de la procesul parinte catre procesele fii, cate unul pentru fiecare proces fiu,
  87. si un al treilea canal de comunicatie pentru transmiterea datelor de la procesele
  88. fii catre procesul parinte.
  89.  
  90. Fiecare proces va afisa identitatea sa si pe cea a procesului parinte.
  91.  
  92. Se vor trata toate cazurile de exceptie ce pot apare.
  93.  
  94. NOTA: pastrati enuntul in acest comentariu si scrieti rezolvarea mai jos.
  95. *******************************************************************************************************/
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top