Я пытаюсь использовать fork для сортировки файлов в каталогах.У меня есть код слияния, но я пытаюсь выяснить, как использовать fork перед тем, как его реализовать.
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include "scannerCSVsorter.h"
int main(int argc, char* argv[]){
char buffer[100];
getcwd(buffer,100);
traverse(buffer);
return 0;
}
void traverse(char *name){
DIR *direc;
struct dirent *dirent_n;
direc = opendir(name);
chdir(name);
while((dirent_n = readdir(direc)) != NULL){
if(isDir(dirent_n->d_name) != 0){
if(!strcmp(dirent_n->d_name,".") || !strcmp(dirent_n-
>d_name,"..")){ //avoid the current and parent directory
continue;
}
printf("%s is a directory\n", dirent_n->d_name);
fork();
printf("%d\n", getpid());
if(getpid() == -1){
printf("failure to create child\n");
return;
}
traverse(dirent_n->d_name);
}
else{
pid_t child = fork();
if(getpid() == -1){
printf("failure to create child\n");
return;
}
if(getpid() == child){
printf("%s is a file\n", dirent_n->d_name);
return;
}
}
}
return;
}
int isDir(char name[]){
struct stat state;
if(stat(name, &state) != 0)
return 0;
return S_ISDIR(state.st_mode);
}
Это мой вывод
-Movie_megadata is a directory
-Movie_megadata is a directory
-7715
-7716
-7717
-7718
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-7715
-7720
-7723
-number 2 is a directory
-7719
-7728
-7726
-7727
-7721
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-number 2 is a directory
-7716
-7718
-7736
-7717
-7730
-7725
-number 2 is a directory
-7731
-number 2 is a directory
-7729
-number 2 is a directory
-7739
-7735
-7740
-7738
-7732
-7742
-7741
-7722
-7733
-number 2 is a directory
-7744
-7724
Я думаю, это из-за того, что мой указатель не был очищен, а форк не перезапустил цикл.Я пробовал fflush (stdout), но я получаю ту же ошибку.Есть ли способ очистить указатель каталога.