Processus père et tubes

Bonjour,
Ma question est la suivante: Est-ce qu'un processus père peut écrire à la fois sur 2tubes différents?
Merci
Configuration: Linux
Firefox 3.0.3

6 réponses

  1. Modérateur
    Oui et return (((0))), aussi :-) En attendant, rajoute ton accolade parce que là, ça ne marche pas sans :-)
    1. Modérateur
      Ben oui il manque une accolade. C'est pour ça que c'est bien d'indenter... Par ailleurs return n'est pas une fonction et on écrit plutôt "return 0;" que "return(0);".

      Bonne chance
      1. Bonjour,
        J'ai créé une mémoire partagée entre processus père et son fils le père écrit des données et le fils lit ses données.Le programme m'affiche l'erreur suivante:

        memoire.c: In function ‘main’:
        memoire.c:107: error: expected declaration or statement at end of input

        Voila le programme que j'ai fait:

        ////////////////////////////////////

        #include<sys/types.h>
        #include<sys/ipc.h>
        #include<stdio.h>
        #include<stdlib.h>
        #include <signal.h>
        #include <errno.h>
        #define SHM_SIZE 1024

        int main(int argc, char *argv[])

        {
        key_t clef ; // la clef associee au segment
        pid_t pid ;
        char *mem ;
        int shmid ; // l'identificateur du segment de memoire partagee
        int t[5]={214,4553,65,90,123};
        typedef struct
        {
        int t1[5];
        }structure_partagee;
        // J'instancie une structure "structure_partagee" et je l'appelle Data.
        structure_partagee *Data;

        char *name = (char *) malloc(15*sizeof(char)) ;
        int i;
        /* construire
        une cle identifiant le segment */
        clef = ftok(name,(key_t) clef) ;

        /*indiquer
        les droits d'acces de ce segment de memoire */

        shmid = shmget((key_t)clef, SHM_SIZE,0644|IPC_CREAT ) ;
        if ( shmid== -1 )
        {
        perror("shmget") ;
        exit(1) ;
        }

        pid =fork() ;

        if(pid > 0)
        {//père

        mem = (char*) shmat(shmid,(void*)0, 0);
        if (mem ==(char*)-1)
        {
        perror("shmat") ;
        exit(1) ;

        }
        for(i=0; i<4; i++)
        {
        Data->t1[i]=t[i];
        }

        if(shmdt(mem)==-1)
        {
        perror("shmdt");
        exit(1);
        }

        }

        else if(pid==0)//fils

        {
        printf("Je suis le fils\n") ;
        mem = (char*)shmat(shmid,(void*)0,0) ;
        if (mem ==(char*)-1){
        perror("attachement impossible") ;
        exit(1) ;

        }
        printf("Affichage fils1\n");
        for(i=0; i<4; i++)
        {
        printf("%d",Data->t1[i]);
        }

        printf("ecrit dans le segment: %s \n",mem);

        if(shmdt(mem)==-1)
        {
        perror("shmdt");
        exit(1);
        }
        return(0);
        }
        1. Contributeur
          hello
          en shell, on passe par des fichiers FIFO pour qu'une tâche "alimente" plusiers pipes, ici 3:

          mkfifo fifo1 fifo2
          commande1 < fifo1 > log1 2>&1 &
          commande2 < fifo2 > log2 2>&1 &
          commande ¦ tee fifo1 fifo2 ¦ commande3 > log3 2>&1
          1. Merci oci pr la réponse
        2. Modérateur
          Oui, de la même façon qu'il peut écrire dans plusieurs fichiers à la fois. En langage C, pour un fichier c'est la fonction fopen, pour un processus, c'est popen :
          http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/popen.3.html

          popen est une manière élégante d'ouvrir un processus fils depuis un processus père, mais après tout dépend de tes besoins. En outre, popen fait référence dans son man à d'autres fonctions permettant de manipuler des processus (voir en bas de page).

          Bonne chance
          1. Merci bcpp pr la réponse.