使用execvp实现find命令

时间:2015-10-18 01:05:14

标签: unix find command

如何解决这个问题,为什么会这样?

char *command[]={"find","-executable","print",">","filename.txt",NULL}
execvp("find",command);

find:路径必须位于表达式之前:>

1 个答案:

答案 0 :(得分:0)

您无法以这种方式获取重定向...在shell中键入find ... > file.txt时,>file.txt不是find命令的参数。 shell解释您键入的所有内容并从命令行中提取重定向,在exec剩余的内容之前进行重定向。

可以通过dup之前exec某个文件描述符来获取重定向。通常,这是在fork之后和exec之前完成的:

if (fork()==0) {
  f = open("file.txt",...);
  dup2(1,f); // redirects stdout to f...
  close(f);
  exec(...); // open files remains open on exec (by default).
}