内容简介
#include <unistd.h>int pipe(int%uA0filedes[2])
描述
pipe() creates a pair of file descriptors, yiibaiing to a pipe inode, and places them in the array yiibaied to by%uA0filedes.%uA0filedes[0]%uA0is for reading,%uA0filedes[1]%uA0is for writing.返回值
On success, zero is returned. On error, -1 is returned, and%uA0errno%uA0is set appropriately.错误
标签 | 描述 |
---|---|
EFAULT | filedes%uA0is not valid. |
EMFILE | Too many file descriptors are in use by the process. |
ENFILE | The system limit on the total number of open files has been reached. |
遵循于
POSIX.1-2001.实例
The following program creates a pipe, and then%uA0fork(2)s to create a child process. After the%uA0fork(2), each process closes the descriptors that it doesn’t need for the pipe (seepipe(7)). The parent then writes the string contained in the program’s command-line argument to the pipe, and the child reads this string a byte at a time from the pipe and echoes it on standard output.#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, " ", 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) } }
%uA0