• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

msr

Como fazer um processo esperar até receber nova instrução?

4 mensagens neste tópico

Boas pessoal,

Tou com uma duvida relativamente em como fazer um processo-filho esperar ate receber instruções/ordens do processo-pai.

Tenho um processo principal (processo pai) que de vez em quando vai mandando (por pipe) ordens para o filho, tendo este que estar sempre à escuta. O código que arranjei para o processo filho é o seguinte:

if(pid == 0){
    reg_auto->pid = getpid();
    printf("Novo processo automovel (%s) lancado (pid:%d).\n",
            reg_auto->matricula,reg_auto->pid);
    close(fd[1]); /*extremidade de escrita fechada*/

    while(1){
      read(fd[0],buf,sizeof(buf));

      if(strcmp(buf,"entrada!") == 0)
        printf("recebido: %s",buf);

      if(strcmp(buf,"saida!") == 0)
        exit(0);
    }
  }

O "sempre à escuta" resolvi-o com o while(1), mas não sei se será a melhor opção. Outra questão é, ao escrever para uma extremidade do pipe, apesar desta ser lida, a informação só desaparece do pipe após se efectuar outra escrita? (excluindo hipotese de se fecharem extremidades de escrita/leitura)

Com este codigo estão-me a acontecer algumas coisas estranhas.

Acontece que se eu mandar, por pipe, a string "saida!" para este processo, o processo termina naturalmente e o programa continua. No entanto ao enviar a string "entrada!", apesar dele fazer printf de "entrada!" vai buscar uma parte do código que não está dentro deste if(pid==0){...} e não percebo o porque disso acontecer (corre uma parte do programa executado pelo processo principal (processo pai) em que é pedido um char).

Desde já grato por qualquer esclarecimento que me possam fornecer :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

faz ciclo infinito a ler do pipe qd tiver lido o q interessa sai do ciclo.

0

Partilhar esta mensagem


Link 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