Unix 在C中模拟“find”命令
在C编程语言中,最好的方法是什么Unix 在C中模拟“find”命令,unix,find,Unix,Find,在C编程语言中,最好的方法是什么 find fileName 这是一个复杂的话题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。这是一个复杂的主题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。查找POSIX函数。它被设计为“新文件树漫游”功能 有一个相关但不是立即可用的函数,您可以使用它
find fileName
这是一个复杂的话题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。这是一个复杂的主题。看一看。然后尝试使用scandir扫描当前目录。如果可以的话,您可以实现一个递归版本,假设您正在讨论UNIX find命令并希望对文件名进行递归搜索。查找POSIX函数。它被设计为“新文件树漫游”功能
有一个相关但不是立即可用的函数,您可以使用它。例如,selection函数可能用于调用子目录上的递归扫描,但nftw可能更合适。查找POSIX函数。它被设计为“新文件树漫游”功能 有一个相关但不是立即可用的函数,您可以使用它。例如,选择函数可能用于调用子目录上的递归扫描,但nftw可能更合适。您可以从分叉子进程调用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");
}
}
}
您可以从分叉子进程调用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");
}
}
}
为什么不看看查找源代码?签出。为什么不看看查找源代码?签出。看也看我喜欢!直到现在才知道nftw。似乎真的是POSIX。我甚至把它放在我的OS X上。我喜欢这样!直到现在才知道nftw。似乎真的是POSIX。我甚至把它放在了我的OSX上。