在C中实现管道?

在C中实现管道?,c,process,fork,pipe,dup,C,Process,Fork,Pipe,Dup,我正在尝试实现一个简单的shell。我用这种方式处理: void forkProcess(char* cmd[]) { pid_t pid; char programPath[BUFFERLENGTH] = "/bin/"; strcat(programPath, cmd[0]); int exitStatus; pid = fork(); switch (pid) { case -1: printf("Fork faile

我正在尝试实现一个简单的shell。我用这种方式处理:

void forkProcess(char* cmd[]) {
    pid_t pid;
    char programPath[BUFFERLENGTH] = "/bin/";
    strcat(programPath, cmd[0]);
    int exitStatus;
    pid = fork();
    switch (pid) {
    case -1:
        printf("Fork failed; pid == -1\n");
        break;
    case 0:
        execv(programPath, cmd);
        exit(0);
        break;
    default:
        waitpid(pid, &exitStatus, 0);
        //printf("Exitstatus = %d\n", WEXITSTATUS(exitStatus));
        break;
    }
}
现在,
cmd
参数可能包含管道,例如:

“ls”“-l”“|”“grep”“whatever”“(char*)NULL”

那么如何实现管道功能呢?我知道有些函数像
pipe()
dup()
,但我不知道如何在这种情况下使用它们


谢谢您的建议。

在这种情况下,您可以使用popen()。

在这种情况下,您可以使用popen()。

在启动子项之前,必须完全解析命令行

如果正在使用管道操作符,则必须在调用
fork()
之前设置管道,以便继承它

通常,您还必须使用
close()
并经常使用
dup()
使管道替换分叉进程的stdin


继续阅读这些函数以“了解”全局,或者获得一本介绍Unix I/O的书。

在启动子函数之前,必须完全解析命令行

如果正在使用管道操作符,则必须在调用
fork()
之前设置管道,以便继承它

通常,您还必须使用
close()
并经常使用
dup()
使管道替换分叉进程的stdin

继续阅读这些函数以“了解”全局,或者阅读一本介绍Unix I/O的书