Beispiel #1
0
// traverse a directory tree applying a function when a file is found
void process(char *root)
{
  int numOfFiles = 0;
  que_t nameq;
  char dname[MAXLENGTH];
  char cname[MAXLENGTH];
  char prefix[MAXLENGTH];

  struct dirent *dp;
  DIR *dirp;

    initq(&nameq);
    enqueue(root,&nameq);

    while (true != queue_empty(nameq)) {
      peek_front(dname,nameq); 
      dequeue(&nameq);
      
      dirp = opendir(dname);
      if (dirp != NULL) { // it is a directory

	printf("directory : %s\n",dname);
	strncpy(prefix, dname, MAXLENGTH);
	strncat(prefix,"/", MAXLENGTH);
	
	for (dp = readdir(dirp); NULL != dp; dp = readdir(dirp)) {
	  if ((strcmp(dp->d_name,"..") != 0) && 
	      (strcmp(dp->d_name,".") != 0)) {
	    
	    // prevent from infinite loop
	    strncpy(cname, prefix, MAXLENGTH);
	    
	    // concatenate the prefix
	    strncat(cname, dp->d_name, MAXLENGTH);  
	    enqueue(cname,&nameq);
	  }
	}
	closedir (dirp);
      } else { 
	// test if it is a regular file and not a device or link -- TO-DO
	// if this is a regular file, then process it -- TO-DO
	printf(" processing file: %s\n", dname);
	numOfFiles++;
      }      
    } // while
    
    printf(" a total of %d files were counted\n",numOfFiles);
}
Beispiel #2
0
// traverse a directory tree applying a function when a file is found
void process(char *root)
{
  int numOfFiles = 0;
  que_t nameq;
  char dname[MAXLENGTH];
  char cname[MAXLENGTH];
  char prefix[MAXLENGTH];

  struct dirent *dp;
  DIR *dirp;
  
  struct stat file_info;
  unsigned int fd;

    initq(&nameq);
    enqueue(root,&nameq);

    while (true != queue_empty(nameq)) {
      peek_front(dname,nameq); 
      dequeue(&nameq);
      
      dirp = opendir(dname);
      if (dirp != NULL) { // it is a directory

	printf("directory : %s\n",dname);
	strncpy(prefix, dname, MAXLENGTH);
	strncat(prefix,"/", MAXLENGTH);
	
	for (dp = readdir(dirp); NULL != dp; dp = readdir(dirp)) {
	  if ((strcmp(dp->d_name,"..") != 0) && 
	      (strcmp(dp->d_name,".") != 0)) {
	    
	    // prevent from infinite loop
	    strncpy(cname, prefix, MAXLENGTH);
	    
	    // concatenate the prefix
	    strncat(cname, dp->d_name, MAXLENGTH);  
	    enqueue(cname,&nameq);
	  }
	}
	closedir (dirp);
      } else { 
	// test if it is a regular file and not a device or link -- TO-DO
	fd = open(dname, O_RDONLY);
	if (-1 == fd) {
	  perror("Failed to open read only file - ");
	  exit(-1);
	}
	
	if(fstat(fd, &file_info)==0){
	  // if this is a regular file, then process it -- TO-DO
	  if(S_ISREG(file_info.st_mode)){
	    printf(" processing file: %s\n", dname);
	    numOfFiles++;
	  }
	}
	close(fd);
      }      
    } // while
    
    printf(" a total of %d files were counted\n",numOfFiles);
}
Beispiel #3
0
int queue_peek(node* list) {
    return peek_front(list);
}