Jump to content

Programa em c usando processos


Recommended Posts

Posted (edited)

Boas pessoal tou com uns problemas na elaboração deste programa:

Desenvolver um programa designado ficha02exer08.c no qual são criados inicialmente dois processos filho.

O primeiro processo irá escrever num ficheiro ficha02exer08-aleatory.dat, números aleatórios localizados entre dois valores fornecidos ao programa através da linha de comando. A escrita dos números deverá ser separada por 1s.

O segundo processo calculará recursivamente a média dos números produzidos e escreverá o resultado no ficheiro ficha02exer08-recursive.dat. O cálculo deverá ser separado por 1s. Também fornecida através da linha de comando será a duração total do programa. Quando este tempo terminar o processo pai deverá criar o terceiro e quarto processos com a função indicada em baixo e em seguida terminar. O comando para correr o programa durante 10 s e considerando os valores entre 20 e 30 será: ./ ficha02exer08 10 20 30

O conteúdo de cada ficheiro deverá ser observado em tempo real através do comando “tail -f”.

O terceiro processo deverá com base nos dados presentes nos ficheiros ficha02exer08-aleatory.dat e ficha02exer08-recursive.dat mostrar em gráfico os resultados obtidos.

O quarto processo deverá então recorrer ao AWK para juntar num só ficheiro ficha02exer08-final.dat os resultados obtidos nos dois ficheiros.dat criados anteriormente.

Edited by Marcelo
Posted

Boa noite,

E os problemas são quais, em concreto ?

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted (edited)

Ja fiz isto mas ainda nao tenho o resultado esperado...Ajudem..

#include <math.h>
#include <sys/time.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// função para gerar numeros automaticos
int get_random(int min,int max) {
return min + (int)( rand() / (double)RAND_MAX * (max-min));
}
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
int filho_1(int argc, char **argv){
int i, t, m, tempo, min, max, soma; 
FILE *a, *b;
tempo=atoi(argv[1]);
a=fopen("ficha02exer08-recursive.dat","w");
b=fopen("ficha02exer08-aleatory.dat","w");
for (i=0;i<=tempo;i++){
 min =  atoi(argv[2]);
 max =  atoi(argv[3]);
 t=get_random (min,max);
 soma=soma+t;
 fprintf(b,"%i \n",t );
 m++;
}
fclose(a);
fclose(b);
}
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
int filho_2(){
int t, m, soma, avg;
FILE *a, *b;
a=fopen("ficha02exer08-recursive.dat","w");
b=fopen("ficha02exer08-aleatory.dat","a");
for(t=1;t<=m;t++){
 avg = soma / m;
 fprintf(a,"%i\n",avg);

}
fclose(a);
fclose(b);
}
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
int filho_3(){
int m;
FILE *a, *b;
a=fopen("ficha02exer08-recursive.dat","w");
b=fopen("ficha02exer08-aleatory.dat","a");
system("awk '{ for(l=0;l<=m;l++) { a=$l;getline;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-aleatory.dat > ficha02exer08-final.dat");
system("awk '{ for(l=0;l<=m;l++) { a=$l;getline$1;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-recursive.dat > ficha02exer08-final.dat");
fclose(a);
fclose(b);
}
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
int filho_4(){
int i, t,tempo;
FILE *a,*b,*c;
a=fopen("ficha02exer08-recursive.dat","r"); 
b=fopen("ficha02exer08-aleatory.dat","r");

fclose(a);
fclose(b);

system("awk '{ for(i=0;i<=tempo;i++) { a=$l;getline;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-aleatory.dat > x1.dat");
system("awk '{ for(t=0;t<=10;t++) { a=$l;getline$1;printf \"%s\\n\" ,a,$1 } }' ficha02exer08-recursive.dat > y2.dat");

c=fopen("gnuscript.dat","w");
fprintf(c,"plot \"x1.dat\" title \"Nº aleatory\",\"y2.dat\" title \"Media\"\npause -1\n");  
fclose(c);
system("gnuplot  \"gnuscript.dat\"");
}
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
int main(){

pid_t filho1,filho2,filho3,filho4;
system("clear");

filho1 = fork();

switch(filho1){
 case -1:
  printf("\nErro ao criar filho 1!\n");
 break;

 case 0:
  printf("\nA criar filho 1...Aguarde!\n");
  sleep(2);
  int filho_1(int argc, char **argv);
  exit(0);
 break;
 default:
  wait();
 break;

}
filho2 = fork();

switch(filho2){
 case -1:
  printf("\nErro ao criar filho 2!\n");
 break;

 case 0:
  printf("\nA criar filho 2...Aguarde!\n");
  sleep(2);
  filho_2();
  exit(0);  
 break;
 default:
  wait();
 break;
}

filho3 = fork();

switch(filho3){
 case -1:
  printf("\nErro ao criar filho 3!\n");
 break;

 case 0:
  printf("\nA criar filho 3...Aguarde!\n");
  sleep(1);
  filho_3();
  exit(0);  
 break;
 default:
  wait();
 break;
}
filho4 = fork();

switch(filho4){
 case -1:
  printf("\nErro ao criar filho 4!\n");
 break;

 case 0:
  printf("\nA criar filho 4...Aguarde!\n");
  sleep(1);
  filho_4();
  exit(0);  
 break;
 default:
  wait();
 break;
}
}

Isto compila faz tudo certo mas nao me mostra o grafico..

Edited by pmg
Falta LP

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.