Bonjour,

J'aimerais utiliser les pseudo terminaux afin de communiquer entre deux processus. Le premier processus effectue le travail et envoi des messages au second processus qui ne sera chargé que de l'affichage des messages via xterm en mode slave.

Voici le code que j'essaie de faire fonctionner (code sans vérification d'erreur pour plus de clarté).


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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
#include <iostream>
#include <cstdlib>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
 
int main(int argc, char** argv)
{
 
    int masterFd, slaveFd, statut;
    pid_t pid;
    std::string slaveName, args;
 
    // Ouverture du pseudo terminal maître
    masterFd = posix_openpt(O_RDWR);
    grantpt(masterFd);
    unlockpt(masterFd);
 
    // Ouverture du pseudo terminal esclave
    slaveName.assign( ptsname(masterFd) );
    slaveFd = open(slaveName.c_str(), O_RDWR);
 
    args.assign("xterm -S");
    args.append(slaveName.substr(slaveName.length()-2, slaveName.length()));
    args.append("/1");
    std::cout << args << std::endl;
 
    pid = fork();
 
    if (pid == 0)
    {
        // Enfant
        close(masterFd);
        dup2(slaveFd, STDIN_FILENO);
        dup2(slaveFd, STDOUT_FILENO);
        dup2(slaveFd, STDERR_FILENO);
        close(slaveFd);
 
        execl("/usr/bin/xterm", args.c_str(), NULL);
 
    }
 
    if (pid > 0)
    {
        // Père
        close(slaveFd);
        std::string message("message");
        write(masterFd, message.c_str(), message.length());
        close(masterFd);
        waitpid(pid, &statut, 0);
    }
 
    return 0;
}
Le terminal xterm se lance bien mais le message ne s'affiche pas !!! J'ai du mal à comprendre comment connecter la sortie du pseudo terminal esclave à l'entrée du terminal xterm.

A L'AIDE...