Труба - это механизм для межпроцессного взаимодействия. Данные, записанные в трубу одним процессом, могут быть прочитаны другим процессом. Примитив для создания трубы - это функция pipe
. Это создает как контуры чтения, так и записи трубы. Для одного процесса не очень полезно использовать трубку для разговора с самим собой. При типичном использовании процесс создает канал непосредственно перед ним forks
один или несколько дочерних процессов. Затем труба используется для связи между родительским или дочерним процессом или между двумя процессами брака. Известный пример такого рода общения можно увидеть во всех оболочках операционной системы. Когда вы вводите команду в оболочке, она выдает исполняемый файл, представленный этой командой, с вызовом fork
. Труба открыта для нового дочернего процесса, и ее выход считывается и печатается оболочкой. This page имеет полный пример функций fork
и pipe
. Для вашего удобства, код приводится ниже:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/* Read characters from the pipe and echo them to stdout. */
void
read_from_pipe (int file)
{
FILE *stream;
int c;
stream = fdopen (file, "r");
while ((c = fgetc (stream)) != EOF)
putchar (c);
fclose (stream);
}
/* Write some random text to the pipe. */
void
write_to_pipe (int file)
{
FILE *stream;
stream = fdopen (file, "w");
fprintf (stream, "hello, world!\n");
fprintf (stream, "goodbye, world!\n");
fclose (stream);
}
int
main (void)
{
pid_t pid;
int mypipe[2];
/* Create the pipe. */
if (pipe (mypipe))
{
fprintf (stderr, "Pipe failed.\n");
return EXIT_FAILURE;
}
/* Create the child process. */
pid = fork();
if (pid == (pid_t) 0)
{
/* This is the child process.
Close other end first. */
close (mypipe[1]);
read_from_pipe (mypipe[0]);
return EXIT_SUCCESS;
}
else if (pid < (pid_t) 0)
{
/* The fork failed. */
fprintf (stderr, "Fork failed.\n");
return EXIT_FAILURE;
}
else
{
/* This is the parent process.
Close other end first. */
close (mypipe[0]);
write_to_pipe (mypipe[1]);
return EXIT_SUCCESS;
}
}
Так же, как и другие функции C вы можете использовать как fork
и pipe
в C++.
Может ли кто-нибудь сказать мне, что является альтернативой для «unistd.h» в VC++ – nightWatcher
http://blogs.msdn.com/b/bclteam/archive/2006/12/07/introducing-pipes-justin-van- patten.aspx для ответа – nightWatcher