Anonymous Pipe Example
Отворете тръба (pipe) и запазете входно/изходните файлови дескриптори (I/O FD)
Създайте дъщерен процес (fork)
Родителски процес: затворете входният файлов дескриптор (input/read)
Запишете съобщение на изходният файлов дескриптор (output/write)
Затворете изходният файлов дескриптор (output/write)
Дъщерен процес: затворете изходният файлов дескриптор (output/write)
Прочетете съобщение от входният файлов дескриптор (input/read)
Отпечатайте полученото съобщение
Затворете входният файлов дескриптор (input/read)
pipe-pass-message.c
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc, char ** argv)
{
int pipefd[2];
int pd = pipe(pipefd);
if(pd == -1)
{
printf("Error pipe!\n");
return EXIT_FAILURE;
}
int pid = fork();
if(pid == -1)
{
printf("Error fork!\n");
return EXIT_FAILURE;
}
if(pid > 0)
{
char* str = "Hello World!";
printf("Parent pid %i\nSend: %s\n", getpid(), str);
close(pipefd[0]);
write(pipefd[1], (void*)str, strlen(str)+1);
close(pipefd[1]);
}
else
{
printf("Child pid %i\nReceive: ", getpid());
char buf[1024];
int len;
close(pipefd[1]);
while((len = read(pipefd[0], buf, 1024)) != 0)
{
printf("%s", buf);
}
close(pipefd[0]);
printf("\n");
}
return EXIT_SUCCESS;
}
Last updated
Was this helpful?