有名管道pipe函数:int pipe(int filedes[2]); 下面程序通过创建进程,父进程写入数据,子进程读取数据,从管道中读取数据。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <string.h> int main() { int fd[2] = {0}; int ret = pipe(fd); if (-1 == ret) { perror("pipe"); exit(1); } pid_t pid = fork(); if (-1 == pid) { perror("fork"); exit(2); } if (0 == pid) { //read char buffer[32] = {0}; while (1) { close(fd[1]);//子进程读数据,关闭写入端 if (-1 == read(fd[0], buffer, 32)) { perror("read"); exit(3); } if (strcmp("exit", buffer) == 0) { close(fd[0]); exit(0); } } } else { //write char buffer[32] = {0}; while (1) { close(fd[0]);//父进程写数据,关闭读取端 scanf("%s", &buffer); if (-1 == write(fd[1], buffer, strlen(buffer))) { perror("write"); exit(4); } if (strcmp("exit", buffer) == 0) { close(fd[1]); exit(0); } printf("recv : %s\n", buffer); memset(buffer, 0, 32); } } return 0; }