int main(int argc, char *argv[]) { struct thread_info *th_info; pthread_t th_id = -1; int fd = -1; if (parse_args(argc, argv, &g_opts)) return -1; fd = getfd(&g_opts); if (fd < 0) { printf("Can not open file.(%d)%s\n", errno, strerror(errno)); goto out; } th_info = calloc(1, sizeof(*th_info)); th_info->fd = fd; th_info->opts = &g_opts; pthread_create(&th_id, NULL, routine, (void *)th_info); controler(fd); out: if (th_id != -1) { printf("wait thread:%lu to exit\n", th_id); pthread_join(th_id, NULL); } if (fd >= 0) { close(fd); } return 0; }
int main() { // Creates the named pipe if it doesn't exist yet int i; int idpai=getpid(); pid_t pid[N_PROCESSOS-1]; char frase[50]; char frase2[50]; if ((mkfifo(PIPE_NAME, O_CREAT|O_EXCL|0600)<0) && (errno!= EEXIST)) { perror("Cannot create pipe: "); exit(0); } if ((mkfifo(PIPE_D_C, O_CREAT|O_EXCL|0600)<0) && (errno!= EEXIST)) { perror("Cannot create pipe: "); exit(0); } for(i=0;i<N_PROCESSOS-1;i++){ if((pid[i]=fork())==0){ if(pid[i]<0){ printf("erro ao fazer fork"); exit(0); } if(i==0)//dispacher processo dedicado dispacher(); if(i==1){ pipe(fd[0]); //processo dedicado a descodificacao de passes close(fd[0][1]); while(1){ read(fd[0][0],frase,50); //Leitura de uma pipe que contem a frase que conterá o mail e a password desencriptar(frase); } } if(i==2){ pipe(fd[1]); close(fd[1][1]); // o mesmo que em cima while(1){ close(fd[1][1]); read(fd[1][0],frase2,50); desencriptar(frase2); } } if(i==3) controler(); // processo dedicado ao controler } else { menu(pid);// a funcao menu e chamada pelo pai kill( pid[0],SIGKILL);// mata os restantes processos kill( pid[1],SIGKILL); kill( pid[2],SIGKILL); kill(pid[3],SIGKILL); wait(NULL); //pai espera pelos processo filhos wait(NULL); wait(NULL); wait(NULL); } } return 0; }