Documente Academic
Documente Profesional
Documente Cultură
/*
* Program: fork-ex.c
*
* Functionalitate: demonstreaza crearea unui proces fiu
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
int main()
{
pid_t pid_fiu;
int nr = 0;
/* ramificarea executiei */
if(pid_fiu == 0)
{ /* zona de cod executata doar de catre fiu */
printf("\nProcesul fiu cu PID-ul: %d , avand parintele cu PID-ul:
%d.\n",getpid(),getppid());
printf("In procesul fiu: dupa apelul fork, variabila nr are initial valoarea:
%d.\n", nr);
nr = 5;
printf("In procesul fiu: dupa modificarea ei, variabila nr are valoarea:
%d.\n", nr);
}
else
{ /* zona de cod executata doar de catre parinte */
printf("\nProcesul tata cu PID-ul: %d , avand parintele cu PID-ul: %d si un fiu
cu PID-ul: %d.\n",
getpid(), getppid(), pid_fiu );
sleep(2);
printf("In procesul tata, dupa 2 secunde: variabila nr are valoarea: %d.\n",
nr);
}
----------------------------------------------------------------------------------
/*
* Program: info-ex1.c
*
* Functionalitate: demonstreaza cateva apeluri ce ofera informatii despre procese
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
int main(void)
{
printf("\nProcesul curent are PID-ul: %d , iar parintele lui este procesul cu
PID-ul: %d.\n",getpid(),getppid());
return 0;
}
-----------------------------------------------------------------------------------
----
/*
* Program: info-ex2.c
*
* Functionalitate: demonstreaza apelurile ce ofera informatii despre procese
*/
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
int main(void)
{
printf("\nProcesul curent are PID-ul: %d , iar parintele lui este procesul cu
PID-ul: %d.\n\n",getpid(),getppid());
-----------------------------------------------------------------------------------
---
/*
* Program: suma_files.c
*
* Functionalitate: suma distribuita cu 2 procese worker si comunicatii prin
fisiere
* {Este un exemplu de calcul paralel folosind strategia supervisor-workers (sau
master-slaves).}
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
void master_init();
void master_finish();
void slave_work(char* fi, char* fo);
int main()
{
int pid1,pid2;
printf("\n\n\n\n\n");
if(pid1 == 0)
{ /* sunt in procesul fiu 1 */
slave_work("f1i","f1o");
return 0;
/* sfarsit executie fiu 1 */
}
/* else sunt in procesul master, executat in paralel cu if-ul de mai sus */
if(pid2 == 0)
{ /* sunt in procesul fiu 2 */
slave_work("f2i","f2o");
return 0;
/* sfarsit executie fiu 2 */
}
/* else sunt in procesul master, executat in paralel cu cei doi fii */
/***********************************************************************/
void master_init()
{
FILE *f1,*f2;
int nr, flag;
}while(nr!=0);
fclose(f1); fclose(f2);
}
/***********************************************************************/
void master_finish()
{
/* Aici mai apare o sincronizare: master-ul trebuie sa citeasca sumele partiale
abia dupa ce
acestea au fost calculate si scrise in fisierele f1o si f2o de catre procesele
slave.
Rezolvare: incercare repetata de citire cu pauza intre incercari.
(sau: se poate astepta terminarea celor 2 fii folosind primitiva wait)*/
FILE *f1,*f2;
int sp1,sp2, cod;
}while(!cod);
fclose(f1);
}while(!cod);
fclose(f2);
/* Afiseaza suma */
printf("Master=%d -> suma nr. introduse este: %d\n", getpid(), sp1+sp2);
}
/***********************************************************************/
suma_partiala=0;
do
{
cod=fscanf(f1,"%d", &nr);
if(cod == 1)
suma_partiala += nr;
}while(cod != EOF);
fclose(f1);
/***********************************************************************/