c - 在带有文件描述符的 execl 中使用 grep

标签 c grep exec file-descriptor unistd.h

我正在尝试执行以下操作:

 execl("/bin/grep","grep","print",fd,NULL);

其中 fd 是一个文件描述符。 所以基本上这应该在 fd 指向的文件中为“打印”进行 grep。 尽管我没有收到编译错误/警告,但它似乎不起作用。 当我给出诸如 "Something.txt" 而不是 fd

之类的文件名时,它会起作用

有人能告诉我为什么这不起作用吗? (我知道 execl 只接受 const char arg* 但正如我所说没有编译错误/警告)。

最佳答案

有两个问题:

  • 你诱使 execl 使用一个小整数作为指针
  • 你期望 grep 理解文件描述符

如果我正确理解您的问题,就在您exec 之前,您应该将描述符重定向到STDIN_FILENO。像这样的东西:

dup2(fd, STDIN_FILENO);
execl("/bin/grep", "grep", "print", NULL);

这应该可行,因为 grep 在未提供输入文件时分析其标准输入。

关于c - 在带有文件描述符的 execl 中使用 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12080905/

相关文章:

c++ - Linux 中的 COM 端口检测

c - mbed CLI : make. py:错误:找不到 ARM 的可执行文件

null - awk 空数据选项

linux - 变量返回两个值,如何将它们存储在不同的变量中?

c - 结构尺寸优化

string - If 语句匹配包含双引号的字符串

bash - 我不明白 bash exec

javascript string exec奇怪的行为

c - 抓取 exec 的输出

c - 失去变量的值(value) - C