首页 > 解决方案 > 创建管道命令和重定向输出的问题

问题描述

如标题所示,我正在尝试创建管道命令,但遇到了一个重大错误。我无法弄清楚将一个命令的输出重定向到子函数中的另一个命令的问题。我不明白我的重定向错误。

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


void child(char *command, int fd[], int place, int argc){
    if (place != argc){
        close(1);
        dup(fd[place+1]);
        close(fd[place+1]);
    }
  close(fd[1]);
  close(0);
  dup(fd[0]);

  close(fd[0]);

  int exec_return = execlp(command, command, (char *)NULL);
}

int main(int argc, char *argv[]){
    int sizeOfFd= 2*(argc-1);
    int fd[sizeOfFd];
    for(int i = 0; i < argc-1; i = i + 1){
        if(pipe(fd+2*i) != 0){
            exit(errno);
        }
        if (argc <= 0) {
            return EINVAL;
        }
    }
    
    for (int j = 1; j < argc; j = j + 1){
            
        int wstatus;

        pid_t pid = fork();
            
        if (pid == -1) {
            exit(0);
        }
        if (pid > 0) {
        
            waitpid(pid, &wstatus, 0);
        }
        if(pid == 0) {
                
            child(argv[j], fd, j, argc);
        }
    }
    return 0;
}```

标签: c

解决方案


推荐阅读