在C中实现管道?
我正在尝试实现一个简单的shell。我用这种方式处理:在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
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的书