Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] Pipe

  1. #1
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936

    [C] Pipe

    Devo realizzare un programmino che ne richiami un altro e scriva l'output di quest'ultimo su di una socket (praticamente la cosa che fa Apache con i CGI)...
    Per ora faccio così:
    - faccio partire una pipe (si dice "faccio partire una pipe"? :master: )
    - Forko il programma
    - il figlio chiude un lato della pipe e connette l'altro al suo stdout
    - il figlio esegue quindi un programma (il cui stdout viene inviato alla pipe)

    - il padre *dovrebbe* poter leggere la pipe, guardarne la dimensione ed inoltrarla ad una socket, ma come faccio tutto cio'?


    Per ora ho fatto questo:
    codice:
    int pdes[2];					// [0] = lettura, [1] = scrittura
    pid_t pid;
    			
    if ( pipe ( pdes ) ) {				// apro la pipe
    	printf ( "Errore: impossibile creare la pipe per la SSP.\n" );
    	exit ( 1 );
    }
    			
    if ( ( pid = fork() ) == -1 ) {			// forko il programma
    	printf ( "Errore: impossibile creare il figlio per la SSP.\n" );
    	exit ( 1 );
    }
    
    if ( pid == 0 ) {				// figlio: esegue il programma
    	close ( pdes [0] );			// chiudo il capo di output verso il programma
    	dup2 ( pdes [1], STDOUT_FILENO );	// associo il capo di input allo stdout per ascoltarlo
    	execve ( prgName, NULL, NULL );	// eseguo il programma
    }
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Non puoi fare qualcosa di questo tipo ?!?

    codice:
    ...
    if (pid == 0)/*Figlio*/
    {
    	close (pdes [0]);
    	dup2 ( pdes [1], STDOUT);
    	execve ( prgName, NULL, NULL );
    }
    else/*Padre*/
    {
            close(pdes [1]);
            /*Adesso leggo da pdes[0] utilizzando la read(...)*/
    }
    ...

  3. #3
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da Ed_Bunker
    Non puoi fare qualcosa di questo tipo ?!?

    codice:
    ...
    if (pid == 0)/*Figlio*/
    {
    	close (pdes [0]);
    	dup2 ( pdes [1], STDOUT);
    	execve ( prgName, NULL, NULL );
    }
    else/*Padre*/
    {
            close(pdes [1]);
            /*Adesso leggo da pdes[0] utilizzando la read(...)*/
    }
    ...

    Al padre facevo chiudere pdes[0] e leggere pdes[1]

    Grazie

    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.