Processus en C

cs_annaelle75 Messages postés 2 Date d'inscription dimanche 13 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011 - 13 nov. 2011 à 16:35
BunoCS Messages postés 15426 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 28 novembre 2023 - 14 nov. 2011 à 09:19
Bonjour,

Je commence la programmation system sous linux avec le langage C.
Je voudrais utiliser un fork() pour trouver un fichier dans un répertoire et ses sous répertoires.
Je donne en paramètre d'execution le nom d'un repertoire et le nom du fichier à trouver.
Pour chaque sous repertoire trouvé, je veux créer un processus fils pour poursuivre la recherche.
J'ai commencé par faire une fonction recursive pour le parcours du répertoire.
Mais je me bloque au niveau de la création du processus fils pour chaque sous répertoire trouvé.
Voici la source :

 
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include <malloc.h> 
 
 
DIR * ouvrirRepertoire(char *nomRepertoire)
{
DIR *dip;	
if ((dip opendir(nomRepertoire)) NULL)
        {
                perror("opendir");
        }
return 	dip;
 
}
 
int fermerRepertoire(DIR *dip)
{
if (closedir(dip) == -1)
        {
                perror("closedir");
                return 0;
        }
return 1;
}
 
void parcourirRepertoire(char *nomRepertoire, char *nomFichier)
{
 
DIR             *dip;
        struct dirent   *dit;
 
 
dip = ouvrirRepertoire(nomRepertoire);
 
while ((dit = readdir(dip)) != NULL)
        {
        	if (dit->d_type == 4 && strcmp(dit->d_name, ".") > 0 && strcmp(dit->d_name, "..") > 0)
{
 
char * chemin = NULL;
asprintf(&chemin, "%s%s%s", nomRepertoire, "/", dit->d_name);
printf("\nSous rep : %s", chemin);
parcourirRepertoire(chemin, nomFichier);
 
}
 
 
 
if (dit->d_type == 8)
{
if (strcmp(nomFichier, dit->d_name) == 0)
{
char * chemin = NULL;
asprintf(&chemin, "%s%s%s", nomRepertoire, "/", dit->d_name);				
printf("\nFichier trouvé, chemin : %s", chemin);
}
}
 
        }
 
fermerRepertoire(dip);
}
 
 
 
int main(int argc, char *argv[])
{
 
if (argc < 3)
        {
                printf("Usage: %s <repertoire>\n", argv[0]);
                return 0;
        }
 
parcourirRepertoire(argv[1], argv[2]);
printf("\n");	
        return 1;
}


Merci de votre aide.

2 réponses

cs_annaelle75 Messages postés 2 Date d'inscription dimanche 13 novembre 2011 Statut Membre Dernière intervention 13 novembre 2011
13 nov. 2011 à 17:12
J'ai trouvé la réponse par moi même.
Ce sujet n'est plus d'actualité.
Merci
0
BunoCS Messages postés 15426 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 28 novembre 2023 102
14 nov. 2011 à 09:19
Hello,
Tu peux toujours poster la réponse. ça pourra aider par la suite...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous