Bonjour à tous,

J'ai pas mal cherché comment initier une communication entre deux processus et voici la configuration.

J'ai deux fichiers dont un se nomme acq.c et un autre interface.cpp.

Plusieurs méthodes peuvent être testé pour une communication entre deux processus :
1-Création de fichier texte -> marche moyennement
2-Tubes -> recouvrement du processus père par un autre -> Comment trouver le tube créé par le père?
3-Tubes nommés -> bien mais je n'ai aucun moyen de synchroniser le processus fils & père pour la lecture par le fils et lecture par le père.

Ainsi, je propose les tubes nommés.

interface.cpp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
        pid_t pid_fils;
        pid_fils = fork();
 
        if(pid_fils == -1)
        {
            fprintf(stderr, "Erreur de création du processus.\n");
 
        }
 
        if(pid_fils == 0)
        {
            execl("/home/jo-pc/Bureau/Acquisition","Acquisition",NULL);
        }
 
        else
        {
            wait(NULL); //attente de la fin du processus fils bloquante puisque le père ne peut pas lire
 
            //lecture du tube :
            double tmp2=0;
 
            int fd2;
            FILE *fp2;
 
            char *nomfich2="/home/jo-pc/Bureau/test2.txt", chaine2[50];
 
            fd2 = open(nomfich2, O_RDONLY); /* ouverture du tube */
            fp2=fdopen(fd2, "r"); /* ouverture du flot */
            fscanf(fp2, "%s", chaine2); /* lecture dans le flot */
            tmp2 = strtod (chaine2,NULL);
            cout << chaine2 << endl;
            //printf("%lf\n",tmp2); /* affichage */
 
            unlink(nomfich2); /* fermeture du flot */
        }
acq.c :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
        //Ecriture du tube nommé :
 
        int fd;
        FILE *fp;
 
        char *nomfich2="/home/jo-pc/Bureau/test2.txt"; // nom du fichier 
 
        if(mkfifo(nomfich2, 0644) != 0) // création du fichier
        {
                perror("Problème de création du noeud de tube");
                exit(1);
        }
 
        fd = open(nomfich2, O_WRONLY); // ouverture en écriture
        fp=fdopen(fd, "w"); // ouverture du flot
 
         fprintf(fp,"%d\n",numberOfPixels); // écriture dans le flot
 
        unlink(nomfich2); // fermeture du tube
Je lance un fork depuis interface.cpp.
Pour le processus père je mets un wait(NULL) afin d'attendre la fin du processus fils. Le problème c'est que ceci est bloquant pour le processus père et fils. Le fils attend qu'un processus viennent lire le tube nommé... Comment faire?

Merci d'avance