Model Examen SO


al doilea test practic, 2012

Multumim, Diaconescu Stefan

                                                                     
/*******************************************************************************************************
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.
*******************************************************************************************************/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: