Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C Linux system Process
I am making a sample form of
-ls
function in linux. The program searches all files in a directory. And If there is a directory in the current directory that we are searching for files, Program gets in that directory and prints all files too and so on.. I mean The program prints everything in a directory and directories under current directory. For example If I searches it in Desktop, It gives me all files under Desktop.
 
I DID this all but The problem is about
fork()
process. I want child process to create
fork()
when It finds a directory and I want parent process to print the name of files.Thats all what I want.But when I run the program, I accrooss a file name several times. I want to see a file or directory name only ones not several times. How can I handle this?
 
int searchDirectory(char *currDir) 
{   
struct dirent *direntp;
DIR *dirp;
char currentDir[250];
 

if ((dirp = opendir(currDir)) == NULL) 
{
    perror("Failed to open directory");
    return 1;
}
 
while ((direntp = readdir(dirp)) != NULL)
{   
    /*Only Parent can print the results*/
    if(strcmp(direntp->d_name,".") !=0  
        && strcmp(direntp->d_name,"..") != 0 && pid != 0)
        printf("PID %d PPID %d : %s\n",getpid(),getppid(), direntp->d_name);
 
    if(direntp->d_type == DT_DIR )
    {
        /*Only child can make process*/
        if(strcmp(direntp->d_name,".") !=0  
            && strcmp(direntp->d_name,"..") != 0 && pid == 0)
        {
            pid = fork();               
            numOfDirectories++;
            //Copies the path and searches in again
            sprintf(currentDir, "%s/%s", currDir, direntp->d_name);
            searchDirectory(currentDir);  //Recursive Step
        }  
    }
}
   while ((closedir(dirp) == -1) && (errno == EINTR)) ;
 
   return 0; //Sabri Mev at GYTE
}
Posted 3-Apr-13 5:49am
(unknown member)
Comments
Richard MacCutchan at 3-Apr-13 11:48am
   
Don't use fork, just use a recursive function.
Radha.Krishna12 at 13-May-13 7:46am
   
How can you compare pid == 0 before fork() ??

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 7,800
1 Sergey Alexandrovich Kryukov 7,072
2 DamithSL 5,604
3 Manas Bhardwaj 4,986
4 Maciej Los 4,790


Advertise | Privacy | Mobile
Web04 | 2.8.1411023.1 | Last Updated 3 Apr 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100