pipe() - Unix,Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论区     关于TP  

pipe() - Unix,Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

pipe - 创建管道

概要

#include <unistd.h>

int pipe(int filedes[2]);

描述

pipe() 创建一对指向管道inode的文件描述符,并将它们放置在filedes指向的数组中。filedes[0]用于读取,filedes[1]用于写入。

返回值

成功时返回零。出错时返回 -1,并适当地设置errno

错误

标签描述
EFAULT filedes无效。
EMFILE 进程使用了过多的文件描述符。
ENFILE 已达到系统对打开文件总数的限制。

符合标准

POSIX.1-2001。

示例

下面的程序创建一个管道,然后使用fork(2)创建一个子进程。fork(2)之后,每个进程都关闭它不需要的管道描述符(参见pipe(7))。然后父进程将程序命令行参数中包含的字符串写入管道,子进程一次读取一个字节地从管道读取此字符串,并在标准输出上将其回显。

#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 pfd[2]; pid_t cpid; char buf;

assert(argc == 2);

if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); }

cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }

if (cpid == 0) { /* Child reads from pipe */ close(pfd[1]); /* Close unused write end */

while (read(pfd[0], &buf, 1) > 0) write(STDOUT_FILENO, &buf, 1);

write(STDOUT_FILENO, "\n", 1); close(pfd[0]); _exit(EXIT_SUCCESS);

} else { /* Parent writes argv[1] to pipe */ close(pfd[0]); /* Close unused read end */ write(pfd[1], argv[1], strlen(argv[1])); close(pfd[1]); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } }

参见



previous next Printer Friendly

广告


  

广告



广告