在C编程语言中执行此操作的最佳方法是什么?
find fileName
答案 0 :(得分:4)
答案 1 :(得分:2)
您可以从分叉的子进程中调用find
并从管道中获取find
的输出:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFSIZE 1000
int main(void) {
int pfd[2], n;
char str[BUFSIZE + 1];
if (pipe(pfd) < 0) {
printf("Oups, pipe failed. Exiting\n");
exit(-1);
}
n = fork();
if (n < 0) {
printf("Oups, fork failed. Exiting\n");
exit(-2);
} else if (n == 0) {
close(pfd[0]);
dup2(pfd[1], 1);
close(pfd[1]);
execlp("find", "find", "filename", (char *) 0);
printf("Oups, execlp failed. Exiting\n"); /* This will be read by the parent. */
exit(-1); /* To avoid problem if execlp fails, especially if in a loop. */
} else {
close(pfd[1]);
while ((n = read(pfd[0], str, BUFSIZE)) > 0) {
str[n] = '\0';
printf("%s", str);
}
close(pfd[0]);
wait(&n); /* To avoid the zombie process. */
if (n != 0) {
printf("Oups, find or execlp failed.\n");
}
}
}
答案 2 :(得分:1)
这是一个复杂的话题。看看the GNU libc documentation。然后尝试使用scandir扫描当前目录。如果可行,您可以实现递归版本,假设您正在讨论UNIX查找命令并希望对文件名进行递归搜索。