c - 将“>>”作为 execv 参数传递?
问题描述
我正在尝试将一些参数传递给 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(标准输出)并使用在文件描述符 1 处以附加模式openat
打开。然后调用.output.txt
execv
(注意事项:我做这样的事情已经有几十年了,所以我的记忆可能已经改变,所需的精确步骤可能已经改变。)
一个更粗略但更易于编码的选项是用于execv
执行一个 shell,你传递参数请求它解释和执行你的命令,包括重定向,如这个答案所示。
推荐阅读
- c++ - 将内存预分配给对齐的字节,如 c 或 c++ 中的对齐分配
- javascript - 仅在来自 axios 的请求的循环完成后才执行代码块
- ubuntu-18.04 - Zabbix代理无法连接到Zabbix5.0服务器
- c - 为结构内的变量动态分配内存,如 int、double 等
- c# - Xamarin.Forms ImageCell 不显示图像版本 4.7.0.xx
- css - 为什么grid-gap会导致没有百分比的溢出?
- javascript - 第一个 JavaScript 参数是否可能具有默认值?
- python - TypeError:Python Spacy-Stopword NLP 中需要一个整数
- firebase - 使用 Firebase Cloud Function 解析本地 .CSV 文件?
- html - 图像叠加悬停“指针事件:无;” 在 WordPress 中不起作用?