Я пытаюсь лучше понять концепцию разветвления процесса путем обхода каталога в C.
Моя функция не работает так, как я ожидаю: некоторые из моих каталогов и файлов работаютпосетил несколько раз.
Я должен начать с текущего рабочего каталога и перечислить все файлы / папки.Каждый раз, когда подкаталог найден, я должен вызывать fork () и делать то же самое, пока не исчерпал каждый файл / каталог.Мне не нужно посещать элементы в каком-то определенном порядке, но мне нужно посещать каждый из них ровно один раз.
Я запустил программу рекурсивно, без использования fork ().Но я не могу понять это правильно с помощью fork ().Вот функция.Ему просто передается строка ".", Чтобы запустить ее в текущем рабочем каталоге.
int traverse(char* directory)
{
struct dirent *currentDir;
DIR *traverser = opendir(directory);
if (traverser == NULL)
{
printf("Error: Could not open directory.\n");
return 0;
}
while ((currentDir = readdir(traverser)) != NULL)
{
if (currentDir->d_type == DT_DIR && strcmp(currentDir->d_name, ".") != 0 && strcmp(currentDir->d_name, "..") != 0)
{
int PID = fork();
forkCount++;
char pathBuffer[1024];
if (PID == 0)
{
snprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", directory, currentDir->d_name);
traverse(pathBuffer);
}
else
{
listOfPIDS[forkCount] = PID;
int status = 0;
wait(&status);
}
}
else if (strcmp(currentDir->d_name, ".") != 0 && strcmp(currentDir->d_name, "..") != 0)
{
printf("%s\n", currentDir->d_name);
}
}
closedir(traverser);
return 0;
}