在execl中使用grep和文件描述符

ffl*_*ing 0 c grep file-descriptor exec unistd.h

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

 execl("/bin/grep","grep","print",fd,NULL);
Run Code Online (Sandbox Code Playgroud)

其中fd是文件描述符.所以基本上这应该是fd指向的文件中的"print".虽然我没有编译错误/警告但它似乎不起作用.当我给出一个文件名"Something.txt"而不是fd

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

cni*_*tar 5

有两个问题:

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

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

dup2(fd, STDIN_FILENO);
execl("/bin/grep", "grep", "print", NULL);
Run Code Online (Sandbox Code Playgroud)

这应该有效,因为grep在没有提供输入文件时分析它的标准输入.