gpt4 book ai didi

c - 在 C 中实现管道?

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

我正在尝试实现一个简单的 shell。我以这种方式 fork 进程:

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""随便""(char*)NULL";

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

感谢您的任何建议。

最佳答案

fork() 启动子进程之前,您必须完全解析命令行。

如果使用管道运算符,则必须在调用 fork() 之前设置管道,因此它是继承的。

通常,您还必须使用 close() 并经常使用 dup() 来使管道替换派生进程的标准输入。

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

关于c - 在 C 中实现管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13682941/

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