>"作为 execv 参数传递?-6ren"> >"作为 execv 参数传递?-这个问题已经有答案了: How can I pass the redirection operator '>' as an argument for execv? (2 个回答) 已关闭 4 年前。 -6ren">
gpt4 book ai didi

c - 将 ">>"作为 execv 参数传递?

转载 作者:行者123 更新时间:2023-11-30 19:29:40 24 4
gpt4 key购买 nike

我正在尝试将一些参数传递到 execv 调用中:

char *const paramList[] = {"/bin/grep", "-rn", "comrade", 
"/home/sgspectra/Documents/testing_grep/",
">>", "output.txt", NULL};

我相信“>>”和“output.txt”被读取为其他目录的参数进行搜索,而不是将输出发送到“output.txt”。是否可以发送一个仅指示前一个参数是目录的参数?

最佳答案

当您在支持 >> 的 shell 中键入命令时,shell 会在您的命令本身中处理“>> 文件名”。然后它从命令行中删除该文本。然后,命令行的其余部分(未删除的部分,包括您的命令和任何其他参数)将传递给 execv 或其相关函数之一。

要做同样的事情,你需要做的是:

  • 调用 fork 创建进程的子进程。
  • 在父进程中(其中 fork 返回其创建的子进程的进程 ID),继续执行其他操作 - 父进程可能会等待子进程,或者可能会继续执行其他操作。
  • 在子级中(其中 fork 返回 0),关闭文件描述符 1(标准输出)并使用 openat 打开 output.txt在文件描述符 1 处以追加模式。然后调用 execv

(买者自负:我已经几十年没有做过这样的事情了,所以我的内存可能已经改变,并且所需的精确步骤可能已经改变。)

一个更粗略但更易于编码的选项是使用 execv 来执行 shell,您可以传递参数请求它解释和执行您的命令,包括重定向,如 this answer 所示。

关于c - 将 ">>"作为 execv 参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488793/

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