gpt4 book ai didi

c - 尝试在 Ubuntu 中实现无名管道程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:53 25 4
gpt4 key购买 nike

我正在尝试制作一个模拟未命名管道的程序,就像在 Ubuntu 的终端中一样。该程序接收文件名和为每个文件执行的命令。我想通过管道将程序的输入/输出串起来,这样第一个程序的输入将是 std.in,它的输出将是第二个程序的输入,依此类推。这是我到目前为止所拥有的:

void np_exec(char* cmd, char** argv)
{


while(*(++argv) != NULL)
{
int pid = fork(); //parent executes
if(pid < 0)
{
printf("Error forking")
exit(1);
}

if(pid != 0) // parent
if (execvp(cmd, *argv) == -1)
perror("execvp failed");

//somewhere here i want to pipe input to output

}
}

int main(int argc, char** argv)
{
assert(strcmp(argv[argc-1], "-"));

int i;
for (i = 1; i < argc; ++i) {
if (!strcmp(argv[i], "-"))
{
argv[i] = NULL;
np_exec(argv[1], &argv[1]);
argv = &argv[i];
argc -= i;
i = 0;
}
}

char* args[argc];
args[argc-1] = NULL;

for (i = 1; i < argc; ++i) {
args[i-1] = argv[i];
}

if (execvp(args[0], args) == -1)
perror("execvp failed");
return;
}
}

如您所见,我正在为管道实现而苦苦挣扎。另外,有没有办法测试这个程序是否有效?是否有写入文件的命令(然后有望对其他文件进行写入?)

最佳答案

已经有一篇文章解释了类似问题的解决方案: Using dup2 for piping

基本上,您将 parent 的标准输出连接到 child 的标准输入。

要进行测试,只需编写一个测试程序(您也可以在父进程中执行此操作),使用 putchar() 将字符写入标准输出,另一个(用于子进程)使用 getchar() 从标准输入读取字符。

关于c - 尝试在 Ubuntu 中实现无名管道程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30402248/

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