0

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

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

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

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

4

1 回答 1

5

有2个问题:

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

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

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

这应该可以工作,因为grep在没有提供输入文件时会分析其标准输入。

于 2012-08-22T20:31:39.280 回答