小编cma*_*in0的帖子

用子进程和父进程写入管道

我正在尝试创建一个调用sort的子项.父级通过管道将数据发送给子级.我的代码编译并运行,但没有输出.我究竟做错了什么?我没有正确关闭管道,写管道还是正确输出数据?

[eddit]在我的系统上,我需要调用/ bin/sort NOT/usr/bin/sort!

#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>

int main(void){
int pipes[2];
pid_t pid;
FILE *stream;

if(pipe(pipes) == -1)
    printf("could not create pipe\n");

switch(fork()){
    case -1:
        fprintf(stderr, "error forking\n");
        break;
    case 0:
        dup2(pipes[0], STDIN_FILENO);

        pid = getpid();
        printf("in child, pid=%d\n");

        if(close(pipes[1]) == -1)
            fprintf(stderr,"err closing write end pid=%d\n", pid);

        execl("/usr/bin/sort", "sort",  (char*) NULL);
        break;
    default:
        stream = fdopen(pipes[1], "w");
        pid = getpid();
        printf("in parent, pid=%d\n", pid);

        if (stream == NULL) …
Run Code Online (Sandbox Code Playgroud)

c redirect fork pipe

2
推荐指数
1
解决办法
3万
查看次数

标签 统计

c ×1

fork ×1

pipe ×1

redirect ×1