L'interface pour POSIX fonctionne uniquement en langage C. Mais vous pouvez les utiliser en C++.
En gros:
#include <unistd.h>
// Include some other things I forgot. See manpages.
int main()
{
// Open two pipes for communication
// The descriptors will be available to both
// parent and child.
int in_fd[2];
int out_fd[2];
pipe(in_fd); // For child's stdin
pipe(out_fd); // For child's stdout
// Fork
pid_t pid = fork();
if (pid == 0)
{
// We're in the child
close(out_fd[0]);
dup2(out_fd[1], STDOUT_FILENO);
close(out_fd[1]);
close(in_fd[1]);
dup2(in_fd[0], STDIN_FILENO);
close(in_fd[0]);
// Now, launch your child whichever way you want
// see eg. man 2 exec for this.
_exit(0); // If you must exit manually, use _exit, not exit.
// If you use exec, I think you don't have to. Check manpages.
}
else if (pid == -1)
; // Handle the error with fork
else
{
// You're in the parent
close(out_fd[1]);
close(in_fd[0]);
// Now you can read child's stdout with out_fd[0]
// and write to its stdin with in_fd[1].
// See man 2 read and man 2 write.
// ...
// Wait for the child to terminate (or it becomes a zombie)
int status
waitpid(pid, &status, 0);
// see man waitpid for what to do with status
}
}
Ne pas oublier de vérifier les codes d'erreur (que je ne l'ai pas), et consultez les pages de manuel pour les détails. Mais vous voyez le point: lorsque vous ouvrez des descripteurs de fichiers (par exemple via pipe
), ils seront disponibles pour les parents et les enfants. Le parent ferme une extrémité, l'enfant ferme une autre extrémité (et redirige la première extrémité). Etre intelligent et ne pas avoir peur des pages de google et de man.