» »

[C] Procesi

[C] Procesi

Cvenemir ::

Napišite programa, kjer oče ustvari n procesov (sinov). Vsak proces (sin) naj v zanki m-krat izpiše svoj pid in izračuna povprečje prvih "k-zaporedna_številka_sina" števil. Razlika med programoma naj bo le ta, da se pri prvem programu procesi izvajajo striktno zaporedno, medtem ko se pri drugem programu procesi izvajajo striktno vzporedno (razlika v delovanju je vidna v izpisu).

Ker sem nov v programskem jeziku C, me zanima, če lahko na prvi ogled ocenite pravilnost programov. Najlepša hvala.

Vzporedno:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

/*Vzporedno izvajanje procesov*/
int main(int argc, char** argv)
{
    /*Deklaracija spremenljivk*/
	int vilca;
    int n = atoi(argv[1]); /*Število ustvarjenih procesov*/
    int m = atoi(argv[2]); /*Število izpisov PID-a*/
    int k = atoi(argv[3]); /*Zaporedna številka sina*/
    int stevec_k = atoi(argv[3]);
    int povprecje = 0;
    /*Zanka, ki se izvaja, dokler n = 0*/
	while(n > 0)
	{
        /*Ustvarimo sinove  */   
		vilca = fork();
		n--;
		
		/*Preverimo, če je oče sin*/
		if(vilca == 0) 
		{  
			while(m > 0)
			{
                /*Izpis PID-ov*/  
                povprecje += k;
				povprecje /= stevec_k;  
				printf("Izpis PID: %d \nPovprečje: %d \n", (int)getpid(), povprecje);
				m--;
			}
			/*Zaključek*/
			exit(0);
		} 
	}
	while(vilca > n)
	{
            /*Čakanje, da se sinovi zaključijo*/        
			wait(0);
			n--;
	}
	return 0;
}


Zaporedno:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

/*Zaporedno izvajanje procesov*/
int main(int argc, char** argv)
{
    /*Deklaracija spremenljivk*/
	int vilca;
    int n = atoi(argv[1]); /*Število ustvarjenih procesov*/
    int m = atoi(argv[2]); /*Število izpisov PID-a*/
    int k = atoi(argv[3]); /*Zaporedna številka sina*/
    int stevec_k = atoi(argv[3]);
    int povprecje = 0;
    
    /*Zanka, ki se izvaja, dokler n = 0*/
	while(n > 0)
	{
        /*Ustvarimo novega sina*/ 
		vilca = fork();
		n--;
		/*Preverimo, če je oče sin*/
		if(vilca == 0) 
		{
			while(m > 0)
			{
                /*Izpis PID-ov*/    
				povprecje += k;
				povprecje /= stevec_k;  
				printf("Izpis PID: %d \nPovprečje: %d \n", (int)getpid(), povprecje);
				m--;
			}
			exit(0);
		} 
		else 
		{
            /*Čakanje sinov*/
			wait(&vilca);
		}
	}
		
	return 0;
}

boogie_xlr ::

Nikjer ne preverjaš argumentov (argc in argv).

Cvenemir ::

Kaj pa bi naj preverjal?

Ciklamen ::

Koliko argumentov prejmeš ob klicu iz terminala, če jih premalo ali preveč prejmeš ne bo delovalo :)
- End of the Post ->

Cvenemir ::

torej dam vse skupaj v stavek:

if(argv == 3)
{
...
...
}
else
{
printf("Vnesli ste napačno število argumentov");

Ciklamen ::

argc namesto argv :)
- End of the Post ->

Cvenemir ::

Hvala :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Vsota števil v polju

Oddelek: Programiranje
51187 (1125) Cvenemir
»

C (Izračun povprečja)

Oddelek: Programiranje
141523 (1157) joze67
»

[C] najmanjse stevilo

Oddelek: Programiranje
101033 (894) BigWhale
»

C - pomoč

Oddelek: Programiranje
111396 (1136) Thagirion
»

C: connect() funkcija, kako nastaviti timeout

Oddelek: Programiranje
231635 (1416) fefko-the-bulldog

Več podobnih tem