Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!
Faccine,Smilies,Emoticon
Gruppo su Faccialibro

Pagina su Faccialibro
Nuova Discussione
Rispondi
 
Pagina precedente | 1 | Pagina successiva
Stampa | Notifica email    
Autore

Linux Programming - Pipe

Ultimo Aggiornamento: 07/06/2005 19:51
OFFLINE
Post: 489
Post: 66
Registrato il: 17/03/2005
Città: LEGNANO
Età: 42
Sesso: Maschile
VocenelWeb
Member
In questo periodo sto realizzando una shell con funzionalità simili alla bash, e mi sono trovato nella difficoltà di implementare la pipe tra due processi (es. ls -l | less)...eccovi il codice finale (funzionante) relativo alla pipe :
//creo fisicamente la pipe
	pid = fork();
	if (pid == -1) { 	perror("Error "); exit(EXIT_FAILURE); }
	if (pid == 0) {
	//nuovo processo figlio della shell
	//preparo la pipe fisica
	if (pipe(fd) == -1) { perror("Error on pipe :"); exit(EXIT_FAILURE); }
	child_pid = fork();
 	if (child_pid == -1) { 	perror("Error "); exit(EXIT_FAILURE); }
	if (child_pid > 0) {
	//Secondo processo della pipe
	//chiudo stdin
	close(0);
	//chiudo canale di out della pipe
	close(fd[1]);
	//collego canale di in della pipe con il file-descriptor 0 (stdin)
	dup(fd[0]);
	//chiudo canale di in della pipe
	close(fd[0]);
	execvp(cmd2[0], cmd2);
	perror("Error ");
	exit(EXIT_FAILURE);
	}
	if (child_pid == 0) {
		//primo processo della pipe
		//chiudo stdout
		close(1);
		//chiudo canale di in della pipe
		close(fd[0]);
		//collego canale di out della pipe con il file-descriptor 1 (stdout)
		dup(fd[1]);
		//chiudo canale di out della pipe
		close(fd[1]);
		execvp(cmd[0], cmd);
		perror("Error ");
   	exit(EXIT_FAILURE);
	}
	}
	if (pid > 0) {
		//processo shell
		pid = waitpid(-1, &status, 0);
		if (pid == -1) { perror("Error "); exit(EXIT_FAILURE); }
		printf("process [%d] - status [%d]\n", pid, status);
	}


07/06/2005 19:51
 
Email
 
Scheda Utente
 
Modifica
 
Cancella
 
Quota
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
Rispondi
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 08:06. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com