gpt4 book ai didi

c - 带有 pipe( ) 函数的简单 shell

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:03 27 4
gpt4 key购买 nike

我正在编写一个简单的代码来实现 unix/linux shell 的管道功能。

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

void
cisshPipe(char* command1[], char* command2[])

{
int fd[2];//create array for two file descritors
pid_t childPid;//To set for child process
pipe(fd);//To create pipeline here

if((childPid=fork())==-1)
{
perror("fork here");
exit(1);
}

//The below is the real meat for this subroutine
if(childPid==0)//If child process
{
close(fd[0]);//To close the input of child
dup(fd[0]);//To duplicate the input, for the later process
}
else//For the real output
{
close(fd[1]);//To close the parent output first
execvp(command2[],command2);
}

}

但是,对于此处预期的表达式,我在“execvp(command2[],command2)”上遇到了一些编译错误。我认为这是由于我用来将子输出传递给父输入的 dup() 函数。请问有什么修复建议吗?

一些更新:

感谢约翰的回答。我修复了编译问题。但是当我键入“ls | sort”时它正在执行管道功能,我认为它仍然是 dup() 问题的传递。

最佳答案

execvp(command2[],command2);

空的 [] 是语法错误。也许你的意思是:

execvp(command2[0], command2);

关于c - 带有 pipe( ) 函数的简单 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com