Ir para conteúdo
Fórum Script Brasil
  • 0

*urgente*ajuda Com Programa Gerador De 3 Processos


ManoelUFSC

Pergunta

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

  • 0

cara quando você for postar codigos aqui no forum use a opçào code na caixa de ferramentas da caixa de texto fica mais facil de compreender o codigo

#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 varivel, 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
} 

}

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...