Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Marcelo

Programa em c usando processos

Mensagens Recomendadas

Marcelo

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.

Editado por Marcelo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

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"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Marcelo

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

Editado por pmg
Falta LP

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.