Welcome 微信登录

首页 / 操作系统 / Linux / Linux管道pipe使用实例

Moakap总结函数#include <unistd.h>int pipe(int filedes[2]);描述pipe()函数创建一个管道和指向该管道的一对文件描述符,并且将文件描述符存储到文件描述符数组filedes[]中。其中filedes[0]为读端,filedes[1]为写端。返回值0 – 管道创建成功;-1 – 管道创建失败,同时errno置位;错误指示EFAULT – 无效的输入参数filedes;EMFILE – 达到当前进程允许的文件描述符最大值;ENFILE – 达到系统允许的打开文件的最大数;实例下边的例子首先创建一个管道,然后通过fork()创建当先进程的子进程。接着每个进程关闭读写管道不需要的文件描述符。子进程在当前路径下执行“ls –a”命令,通过将管道写描述符fd[1]复制成标准输出,将命令执行输出写到管道;父进程通过fd[0]读取管道数据并显示。#include <sys/wait.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>int main(int argc, char *argv[]){    int fd[2];pid_t pid;char read_buffer[500] = {0};int read_count = 0;int status = 0;//创建管道if (pipe(fd) < 0){printf("Create pipe failed.");return -1;}//创建子进程if ((pid = fork()) < 0){printf("Fork failed.");return -1;}//子进程操作if (pid == 0){printf("[child]Close read endpoint...");close(fd[0]);   /* 关闭不使用的读 文件描述符 *///复制fd[1]到标准输出if (fd[1] != STDOUT_FILENO){if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO){return -1;}//close fd[1],标准输出即为fd[1]close(fd[1]);}//执行命令status = system("ls –a");if (status == -1){return -1;}}else{printf("[parent]Close write endpoint...");//父进程 读 操作close(fd[1]);   /* 关闭不使用的写 文件描述符 *///从管道读数据read_count = read(fd[0], read_buffer, 500);printf("Content under current directory: %s", read_buffer);}}Ubuntu使用大智慧Linux股票行情与分析软件Linux获取毫秒级时间相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数