4.9.   167

34   }

35   return (0) ;

36 }

37

38

39 void depthFirstTraversal(const char *CurrentDir)

40 {

41   DIR *DirP;

42   string Temp;

43   string FileName;

44   struct dirent *EntryP;

45   chdir(CurrentDir);

46   cout  " : "  CurrentDir  endl;

47   DirP = opendir(CurrentDir);

48

49   if(DirP == NULL){

50      cout  "He   ."  endl;

51      return ;

52   }

53   EntryP = readdir(DirP);

54   while(EntryP != NULL)

55   {

56      Temp.erase() ;

57      FileName.erase();

58      Temp = EntryP->d_name;

59      if Temp != ".") && (Temp != "..")){

60         FileName.assign(CurrentDir);

61         FileName.append(1,'/');

62         FileName.append(EntryP->d_name);

63         if(isDirectory(FileName)){

64            string NewDirectory;

65            NewDirectory = FileName;

66            depthFirstTraversal(NewDirectory.c_str()) ;

67          )

68         else{

69            if(isRegular(FileName)){

70               int Flag;

71               Flag = FileName. find (". cpp" );

72               if(Flag > 0) {

73                  pthread_mutex_lock(&CountMutex) ;

74                  FileCount++;

75                  pthread_mutex_unlock(&CountMutex) ;

76                  pthread_mutex_lock(&QueueMutex) ;

77                  TextFiles.push(FileNaine) ;

78                  pthread_mutex_unlock(6eQueueMutex) ;

79              }

80            }

81         }

82

83      }

84      EntryP = readdir(DirP) ;

85   }

86   closedir(DirP) ;

87 }

88

89

90

91 void *task(void *X)