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