c语言创建一个进程检索文件夹,当检索到目录文件时,创建新的子进程,让子进程进入目录文件,继续检索,当检索到普通文件时,打印文件路径与文件名
时间: 2024-09-10 12:05:08 浏览: 16
在C语言中,可以使用`fork()`系统调用来创建新进程,并结合`chdir()`函数切换当前工作目录。以下是一个简单的示例程序,它会创建一个主进程,该进程遍历指定的目录,对于每个子目录,它会创建一个新的子进程并改变工作目录;对于普通文件,它将打印文件路径和文件名:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/types.h>
#define MAX_PATH_LEN 1024
void print_file(const char* path, const char* filename) {
printf("File found: %s/%s\n", path, filename);
}
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s directory_path\n", argv[0]);
return 1;
}
char dir_path[MAX_PATH_LEN];
strcpy(dir_path, argv[1]);
if (chdir(dir_path) != 0) {
perror("Error changing directory");
exit(EXIT_FAILURE);
}
struct dirent* entry;
DIR* dp = opendir(".");
if (dp == NULL) {
perror("Error opening directory");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dp)) != NULL) {
if (entry->d_type == DT_DIR) { // Directory entry
pid_t child_pid = fork();
if (child_pid == 0) { // Child process
chdir(entry->d_name); // Change to subdirectory
print_directory(".", entry->d_name);
} else if (child_pid > 0) { // Parent process
/* Wait for the child to finish */
wait(NULL);
} else {
perror("Error creating child process");
exit(EXIT_FAILURE);
}
} else if (entry->d_type == DT_REG) { // Regular file
print_file(".", entry->d_name);
}
}
closedir(dp);
return 0;
}
void print_directory(const char* base_dir, const char* subdir) {
// In this function, you can create a new child process and repeat the same process,
// using the combination of `chdir()` and `opendir()`, but that's beyond the scope of this example.
}
```