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

Sign in to follow this  
msr

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

Recommended Posts

msr

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 :)

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

×

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.