我正在尝试将一些参数传递给execv调用:
char *const paramList[] = {"/bin/grep", "-rn", "comrade",
"/home/sgspectra/Documents/testing_grep/",
">>", "output.txt", NULL};
我认为正在将“ >>”和“ output.txt”作为其他目录的参数来进行搜索,而不是将输出发送到“ output.txt”。是否可以发送仅指示前一个参数是目录的参数?
答案 0 :(得分:0)
当您在支持>>
的外壳中键入命令时,该外壳会处理命令本身中的“ >> 文件名”。然后它将从命令行中删除该文本。然后,其余命令行(未被删除的部分,包括您的命令和任何其他参数)将传递给execv
或其相关功能之一。
要做同样的事情,您需要做的事情大致如下:
fork
创建流程的子流程。fork
返回为其创建的子级的进程ID)中,继续执行其他操作-父级可能会等待子级,或者可能会继续执行其他操作。fork
返回0),关闭文件描述符1(标准输出),并使用openat
以附加模式在文件描述符1处打开output.txt
。然后调用{ {1}}。(穴居人:自从我做了这样的事情已经过去了几十年,所以我的记忆可能已经改变,所需的确切步骤可能已经改变。)
一个更简单但更容易编码的选项是使用execv
执行一个shell,您传递参数来请求它解释和执行命令,包括重定向,如this answer所示。