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;
} | 
Partager