程序简介:
1.建立有名管道
2.在子進程里打开寫端,以及利用dup2()函數將stdout重定向到有名管道
3.跟着在子進程里使用execl()函數調用/bin/ls
4.在父進程里打開讀端,讀取子進程裏的標準輸出數據,也就識/bin/ls輸出得數據
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define FIFO "stdout_fifo"
int main() {
// Make a fifo that redirect the data from stdout of child
unlink(FIFO);
int res = mkfifo(FIFO, 0777);
if(res == -1) {
perror("mkfifo");
exit(-1);
}
// Child process
if(fork() == 0) {
int fd = open(FIFO, O_WRONLY);
// ********************
// ********************
// Readirect the stdout
dup2(fd, 1);
execl("/bin/ls", "-a", (char*)0);
} else {
// Parent process
char child_stdout[1024] = {0};
int fd = open(FIFO, O_RDONLY);
if(fd == -1) {
perror("open");
exit(-1);
}
// Read and print the data from stdout of child
sleep(3);
read(fd, child_stdout, sizeof(child_stdout));
printf("Parent: %s", child_stdout);
printf("Finished!\n");
// Wait for child process
wait();
}
return 0;
}