eu tenho que fazer o seguinte: Implementar uma aplicação, em Unix ou Windows, que crie no mínimo 3 processos, para realizar uma tarefa onde haja cooperação e sincronização entre os processos que realizam a tarefa.
Daí eu falei com uns amigos e cheguei no código abaixo, mas ainda faltam coisas a fazer, basicamente é o seguinte, o processo pai tem que gerar tres processos filhos e cooperar com eles (não é pra gerar netos), eu falei com o professor e ele disse que o que eu pensei está certo, por exemplo, eu peço pro processo filho 1 gerar um número e gravar em um arquivo (pode ser na memória tambem), o processo 2 ler o número fazer qqer coisa e gravar de novo, e o 3 tambem, o comando wait faz o pai esperar o filho acabar seu processamento... o fork() cria outro processo (cópia), eu até fui longe, so que não sei trabalhar com arquivo ou memória em c...
podes me ajudar?
Aliás o fork() retorna 0 ou outro número, 0 se for o filho...
Valeu
#include <sys/types.h>
#include <unistd.h>
main()
{
int i, status; int n = 10, m = 0; pid_t val, wval;
if ( val = fork() ) { //Primeiro filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
// O pai pega o arquivo que o filho gerou e multiplica m por 20 por exemplo
} else {//vem pra ca se for 0 ou seja o filho estiver executando
for ( i=n; i >0; i-- ) m = m * i;//E agora gravaria no arquivo...
}
if ( val = fork() ) { //Segundo filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
//Deve pegar o arquivo que o primeiro filho escreveu e fazer algo, sei lá, multiplicar por 10 e
//gravar de novo
} else {//vem pra ca se for 0 ou seja o filho estiver executando
//Filho 2 pega o arquivo e faz algo com M (m estará no arquivo, pois não temos acesso a M vari
//vel, pois o unix copia o processo, portanto cada um tem suas variáveis
}
if ( val = fork() ) { //Terceiro filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
// Pai le o arquivo e faz alguma coisa
//Aqui é legal dar um printf so pra mostrar valor final de M
} else {//vem pra ca se for 0 ou seja o filho estiver executando
//filho le arquivo e faz algo tambem
}
}
Ficaria muito agradecido a quem me ajudar por favor.
Pergunta
ManoelUFSC
eu tenho que fazer o seguinte: Implementar uma aplicação, em Unix ou Windows, que crie no mínimo 3 processos, para realizar uma tarefa onde haja cooperação e sincronização entre os processos que realizam a tarefa.
Daí eu falei com uns amigos e cheguei no código abaixo, mas ainda faltam coisas a fazer, basicamente é o seguinte, o processo pai tem que gerar tres processos filhos e cooperar com eles (não é pra gerar netos), eu falei com o professor e ele disse que o que eu pensei está certo, por exemplo, eu peço pro processo filho 1 gerar um número e gravar em um arquivo (pode ser na memória tambem), o processo 2 ler o número fazer qqer coisa e gravar de novo, e o 3 tambem, o comando wait faz o pai esperar o filho acabar seu processamento... o fork() cria outro processo (cópia), eu até fui longe, so que não sei trabalhar com arquivo ou memória em c...
podes me ajudar?
Aliás o fork() retorna 0 ou outro número, 0 se for o filho...
Valeu
#include <sys/types.h>
#include <unistd.h>
main()
{
int i, status; int n = 10, m = 0; pid_t val, wval;
if ( val = fork() ) { //Primeiro filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
// O pai pega o arquivo que o filho gerou e multiplica m por 20 por exemplo
} else {//vem pra ca se for 0 ou seja o filho estiver executando
for ( i=n; i >0; i-- ) m = m * i;//E agora gravaria no arquivo...
}
if ( val = fork() ) { //Segundo filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
//Deve pegar o arquivo que o primeiro filho escreveu e fazer algo, sei lá, multiplicar por 10 e
//gravar de novo
} else {//vem pra ca se for 0 ou seja o filho estiver executando
//Filho 2 pega o arquivo e faz algo com M (m estará no arquivo, pois não temos acesso a M vari
//vel, pois o unix copia o processo, portanto cada um tem suas variáveis
}
if ( val = fork() ) { //Terceiro filho criado... ele executará o if se o val diferente 0
wval = wait(&status);
// Pai le o arquivo e faz alguma coisa
//Aqui é legal dar um printf so pra mostrar valor final de M
} else {//vem pra ca se for 0 ou seja o filho estiver executando
//filho le arquivo e faz algo tambem
}
}
Ficaria muito agradecido a quem me ajudar por favor.
meu email é hamarvelous@hotmail.com
Manoel
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.