Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Saros 20: il robot preciso e molto sottile
Roborock Saros 20: il robot preciso e molto sottile
Il nuovo robot di Roborock per l'aspirazione della polvere e il lavaggio dei pavimenti spicca per immediatezza d'uso e per l'efficacia dell'azione, grazie anche a un ridotto sviluppo in altezza. Saros 20 integra un motore da ben 36.000Pa di potenza e un sistema di lavaggio a due panni rotanti, con bracci estensibili e un sistema di navigazione molto preciso.
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm
ASUS e HIFIMAN uniscono le forze per creare ROG Kithara, cuffie gaming con driver magnetici planari da 100mm, design open-back e microfono MEMS full-band. Una proposta che ambisce a coniugare fedeltà per audiofili e performance ludiche, disponibili a 319 euro
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2010, 12:03   #1
agosteeno
Member
 
Iscritto dal: Aug 2009
Messaggi: 119
[c] problema pipe, dup2()

Salve a tutti, devo fare un programmino in c che implementa il pipeline shell di 3 comandi (in questo caso: who | sort | wc - l). Creo 3 processi dove ognuno dei quali esegue un comando e 2 pipe, una tra il primo e secondo e una tra il secondo e il terzo comando. Redirigo la stdout del primo sull'entrata in scrittura della prima pipe, lo stdin nell'uscita in lettura della prima pipe del secondo processo e il suo stdout sull'entrata in scrittura della seconda pipe e infine lo stdin del terzo nell'uscita in lettura della seconda pipe. Questo e' il codice:

Codice:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void)
{
        pid_t pid, pid1, pid2;

	int pfd[2];
	int pfd1[2];

	if(pipe(pfd) == -1)
	{
		perror("Creando la prima pipe");
		return -1;
	}

	if((pid = fork()) == -1)
	{
		perror("Nella fork");
		return -1;
	}
	if(!pid)
	{
		/** primo figlio */

		if(dup2(pfd[1], 1) == -1) 
		{
			perror("Nella dup2");
			return -1;
		}
		
		close(pfd[0]);
		close(pfd[1]);
		
		execlp("who", "who", (char*) NULL);
	}

	if(pipe(pfd1) == -1)
	{
		perror("Creando la seconda pipe");
		return -1;
	}
	
	if((pid1 = fork()) == -1)
	{
		perror("Nella seconda fork");
		return -1;
	}
	if(!pid1)
	{
		/** secondo figlio */

		if(dup2(pfd[0], 0) == -1)
		{
			perror("Nella dup2");
			return -1;
		}
/* qua si blocca sulla dup2*/
		if(dup2(pfd1[1], 1) == -1)
		{
			perror("Nella dup2");
			return -1;
		}

		printf("effettuata\n");
		close(pfd[0]);
		close(pfd[1]);
		close(pfd1[0]);
		close(pfd1[1]);
		execlp("sort", "sort", (char*) NULL);
	}
	
	if((pid2 = fork()) == -1)
	{
		perror("Nella terza fork");
		return -1;
	}
	if(!pid2)
	{
		/** terzo figlio */

		if(dup2(pfd1[0], 0) == -1)
		{
			perror("Nella dup2");
			return -1;
		}

		close(pfd1[0]);
		close(pfd1[1]);
		execlp("wc", "wc", "-l", (char*) NULL);
	}
	
	close(pfd[0]);
	close(pfd[1]);
	close(pfd1[0]);
	close(pfd1[1]);
	
	waitpid(pid,NULL,0);

	waitpid(pid1,NULL,0);

	waitpid(pid2,NULL,0);

	return 0;
}
si blocca nel secondo figlio, sulla dup2() (come potete vedere nel commento nel codice). Penso sia qualche problema di accesso allo stdout, ma non so' come risolverlo...
agosteeno è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 17:36   #2
agosteeno
Member
 
Iscritto dal: Aug 2009
Messaggi: 119
Grazie lo stesso, ma ho risolto. Nel 3' figlio, anche se non li uso, devo chiudere i descrittori di file pfd[0] e pfd[1], xche' li eredita.
agosteeno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
AMD ha interrotto il supporto al Ryzen Z...
Sempre più attacchi condotti con ...
Windows 11 domina, ma sempre più ...
Iran: sui droni LUCAS è stato imp...
Gli attacchi informatici guidati dall'IA...
Donut Lab svela il secondo test sulle su...
La particolare nebulosa Cranio è ...
Intel Xeon 6+ Clearwater Forest: 288 E-c...
Motorola al MWC 2026: fra razr fold ed e...
SpaceX rinomina la tecnologia Direct to ...
Apple annuncia iPad Air M4: la sorpresa ...
Vivo sorprende al MWC 2026 con l'arrivo ...
Operai BMW tremate: arrivano i primi rob...
ZTL Roma, arriva la conferma: anche le e...
iPhone 17e è ufficiale: arrivano ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v