Je veux traverser le système de fichiers en utilisant des threads et des processus.Mon programme doit supposer que le premier paramètre est soit donné par "-p" propose une application multi-processus ou "-t" qui s'exécute de manière multithread. Le deuxième paramètre est le chemin d'accès d'un fichier ou d'un répertoire. Si mon programme obtient le chemin d'un fichier, il devrait imprimer la taille du fichier en octets. Si mon programme obtient le chemin d'un répertoire, il devrait, de la même façon, imprimer le nom du répertoire, puis traiter toutes les entrées du répertoire à l'exception du répertoire lui-même et du répertoire parent. Si mon programme reçoit un répertoire, il doit afficher toute la hiérarchie enracinée dans le répertoire spécifié. J'ai écrit quelque chose mais je me suis coincé dedans. Je ne peux pas améliorer mon code. Veuillez m'aider.Traverser le système de fichiers en fonction d'un emplacement racine donné en utilisant des threads en utilisant C pour unix
Mon code est le suivant:
comprennent
comprennent
comprennent
comprennent
comprennent
comprennent
comprennent
int funcThread (DIR * D); Int principal (int argc, char * argv []) { pthread_t thread [100]; DIR * dirPointer; struct stat fichier_objet; struct dirent * object_dir; int compteur;
if(opendir(argv[1])==NULL)
{
printf("\n\nERROR !\n\n Please enter -p or -t \n\n");
return 0;
}
if((dirPointer=opendir(argv[1]))=="-t")
{
if ((object_dir = opendir(argv[2])) == NULL)
{
printf("\n\nERROR !\n\nPlease enter the third argument\n\n");
return 0;.
}
else
{
counter=0;
while ((object_dir = readdir(object_dir)) != NULL)
{
pthread_create(&thread[counter],NULL,funcThread,(void *) object_dir);
counter++;
}
}
}
return 0; }
int funcThread (DIR * dptr) { DIR * ptr; struct stat oFile; struct dirent * oDir; int num;
if(ptr=readdir(dPtr)==NULL)
rewinddir(ptr);
if(S_ISDIR(oFile.st_mode))
{
ptr=readdir(dPtr);
printf("\t%s\n",ptr);
return funcThread(ptr);
}
else
{
while(ptr=readdir(dPtr)!=NULL)
{
printf("\n%s\n",oDir->d_name);
stat(oDir->d_name,&oFile);
printf("\n%f\n",oFile.st_size);
}
rewinddir(ptr);
}
}