Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}