我想在shell中执行find命令,只打印* .c文件
然后返回带有文件的字符串并将其打印到stdout。
我正在使用管道来做到这一点。当我尝试跑步时,我总是得到find failed: No such file or directory
我认为问题在于道路。
如果我想打印下载文件夹中存在的所有* .c文件,我应该给它的路径是home/username/Downloads
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv){
int fds[2];
char buffer[4096];
if(pipe(fds) == -1){
perror("pipe creation failed");
exit(1);
}
switch (fork()){
case 0://child
close(fds[0]);
execl("usr/bin/find","find","home/username/Downloads", "-name \"*.c\" -print0",NULL);
perror("find failed");
exit(20);
break;
case -1: //fork failure
perror("fork failure");
exit(1);
default: //parent
close(fds[1]); //close stdin so only can do stdout
int size= read(fds[0],buffer, 4096);
printf("%s",buffer);
}
exit(1);
}
答案 0 :(得分:2)
在usr / bin / find前面缺少一个前导斜杠,所以只有在工作目录为/
时才执行查找答案 1 :(得分:1)
我建议将单独的参数作为单独的参数传递:
execl("/usr/bin/find", "find",
"/home/username/Downloads",
"-name",
"*.c", /* As no shell is invoked no quotation marks are needed to protect the *. */
"-print0",
(char *) NULL);