1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Pipes

Discussão em 'Programação' iniciada por _K_, 20 de Março de 2013. (Respostas: 0; Visualizações: 424)

  1. _K_

    _K_ Power Member

    Boas.


    Tenho este código que guarda estruturas numa pipe e depois vai lê-las no processo pai. Porém o read devolve -1 quando deveria ler uma estrutura.


    Alguém pode ver se estou a fazer algo mal?

    Código:
    int main(){
      
      typedef struct {
        int codigo_cliente, quantidade;
        double preco_custo, preco_venda;
      } registo;
      registo vendas[50];
      registo * reg;
      pid_t pid;
      int dados[10][2];
      int i,d;
      int count = 0;
      for(i = 0; i < 50; i++) {
        vendas[i].quantidade = i;
      }
      for(i = 0; i < 10; i++) {
        printf("%d\n",i);
        pipe(dados[i]);
        pid = fork();
        if(pid == 0) { break; }
      }
      if(pid > 0) {
        wait(0);
        printf("Passou\n");
        registo * init = NULL;
        registo * vendas_maiores = NULL;
        for(i = 0; i < 10 ; i++) {
          printf("Iteracao %d\n", i);
          close(dados[i][1]);
          while((d = read(dados[i][0], reg, sizeof(registo)))) {
    	printf("count = %d\n", count);
    	count++;
    	init = (registo*) realloc(vendas_maiores, count * sizeof(registo));
    	if(init != NULL) {
    	  vendas_maiores = init;
    	  printf("Endereco registo %d\n", reg);
    	  printf("Endereço %d\n" , vendas_maiores);
    	  //printf("Quantidade %d\n", reg->quantidade);
    	  printf("Total %d\n", d);
    	  vendas_maiores[count-1] = *reg;
    	}
          }
        }
        for(i = 0; i < count; i++) {
          printf("Quantidade %d\n", init[i].quantidade);
        }
      } else if ( pid == 0 ) {
        int j;
        close(dados[i][0]);
        for(j = i * 5; j < (i*5+5); j++) {
          if(vendas[j].quantidade > 20) {
    	//printf("Encontrou %d\n", j);
    	write(dados[i][1], &vendas[j], sizeof(registo));
          }
        }
        close(dados[i][1]);
        exit(1);
      } else if ( pid < 0 ) {
        perror("Erro!!");
        exit(-1);
      }
      return 0;
    }
     

Partilhar esta Página