Esempio n. 1
0
int printFilesPrefixMatch(char* directoryName, int indent, char* fileName) {
  DIR * directory = opendir(directoryName);
  struct dirent *currentFile;
  struct stat statp;
  char fileNameString[1024];
  if (directory == NULL) {
    perror("failed to open directory");
    return -1;
  }
  while (( currentFile = readdir(directory))) {
    if (!(strcmp(currentFile->d_name,".") && strcmp(currentFile->d_name,".."))) {
      continue;
    }
    strcpy(fileNameString,directoryName);
    strcat(fileNameString,"/");
    strcat(fileNameString,currentFile->d_name);
    if(stat(fileNameString,&statp)) {
      perror("stat failed");
      return -1;
    }
    if (S_ISREG(statp.st_mode)) {
        int flag;
        char* currentFiles=currentFile->d_name;
        char * result =strstr(currentFiles,fileName);
        flag =0;
        if(result!=NULL) {
          flag =1;
        }
        if(flag==1){
          int k;
          for (k = 0; k< indent; k++) {
            printf("    ");
          } printPermission(statp);
          printf("%s (%d bytes)\n", currentFile->d_name, (int)statp.st_size);
        }
    }  else if (!S_ISREG(statp.st_mode)) {
      int i;
      for(i = 0; i < indent; i++) {
        printf("    ");
      } printPermission(statp);
      printf("%s (sub-directory)\n", currentFile->d_name);
      printFilesPrefixMatch(fileNameString, indent + 1, fileName);
    }
  }
  if (errno!=0) {
    perror("readdir failed");
    return -1;
  } if (closedir(directory)) {
    perror("closedir failed");
    return -1;
  } 
  return 0;
}
Esempio n. 2
0
int printFilesWithPermisions(char* directoryName, int indent, char* fileName) {
  DIR * directory = opendir(directoryName);
  struct dirent *currentFile;
  struct stat statp;
  char fileNameString[1024];
  if (directory == NULL) {
    perror("failed to open directory");
    return -1;
  }
  while (( currentFile = readdir(directory))) {
    if (!(strcmp(currentFile->d_name,".") && strcmp(currentFile->d_name,".."))) {
      continue;
    }
    strcpy(fileNameString,directoryName);
    strcat(fileNameString,"/");
    strcat(fileNameString,currentFile->d_name);
    if(stat(fileNameString,&statp)) {
      perror("stat failed");
      return -1;
    } if (S_ISREG(statp.st_mode) && (!strlen(fileName) || !strcmp(currentFile->d_name,fileName))) {
      int i;
      for (i = 0; i < indent; i++) {
        printf("    ");
      } printPermission(statp);
      printf("%s (%d bytes)\n", currentFile->d_name, (int)statp.st_size);
    } else if (!S_ISREG(statp.st_mode)) {
      int i;
      for(i = 0; i < indent; i++) {
        printf("    ");
      } printPermission(statp);
      printf("%s (sub-directory)\n", currentFile->d_name);
      printFilesWithPermisions(fileNameString, indent + 1, fileName);
    }
  }
  if (errno!=0) {
    perror("readdir failed");
    return -1;
  } if (closedir(directory)) {
    perror("closedir failed");
    return -1;
  } 
  return 0;
}
void list_childFileNfolder(int choice)
{
   DIR *d;
   struct dirent *dir;
   d = opendir("./");
   int child_choice = choice;

   if(d)
   {
      if(child_choice < i)      
           scd = listDetails[child_choice].name; 
      else
      {
           printf(MAKE_RED_DARK"\nYour choice is %d but the list contains %d", choice, (i-1));
           printf("\nInvalid Input....Try Again...\n\n"RESET_COLOR);
          return;
       }
      closedir(d);
   }
   
   struct stat fileFoldStatus;
   stat(scd, &fileFoldStatus);

   struct passwd *own=getpwuid(fileFoldStatus.st_uid);
    
   int user_read, user_write, user_execute;
   int group_read, group_write, group_execute;
   int other_read, other_write, other_execute;
   
   if((S_ISREG(fileFoldStatus.st_mode)))
   {
        printf(MAKE_RED_DARK"\nFile Name :: %s\n"RESET_COLOR, scd);
        user_read  = ((fileFoldStatus.st_mode &S_IRUSR) ? 1 : 0);
        user_write = ((fileFoldStatus.st_mode &S_IWUSR) ? 1 : 0);
        user_execute = ((fileFoldStatus.st_mode &S_IXUSR) ? 1 : 0);
        
        group_read = ((fileFoldStatus.st_mode &S_IRGRP) ? 1 : 0);
        group_write = ((fileFoldStatus.st_mode &S_IWGRP) ? 1 : 0);
        group_execute = ((fileFoldStatus.st_mode &S_IXGRP) ? 1 : 0);
        
        other_read = ((fileFoldStatus.st_mode &S_IROTH) ? 1 : 0);
        other_write = ((fileFoldStatus.st_mode &S_IWOTH) ? 1 : 0);
        other_execute = ((fileFoldStatus.st_mode &S_IXOTH) ? 1 : 0);
        
        printf("File User  ID  = %d\n", fileFoldStatus.st_uid);
        printf("File Group ID  = %d\n", fileFoldStatus.st_gid);
        printf("File User Name = %s\n", own->pw_name);

        printPermission(user_read, user_write, user_execute, group_read, group_write, group_execute, other_read, other_write, other_execute);
        
   }
   else if(S_ISDIR(fileFoldStatus.st_mode))
   {
       printf(MAKE_RED_DARK"\nDirectory :: %s\n"RESET_COLOR, scd);
       
       DIR *dc;
       struct dirent *dirc;
       
       dc = opendir(scd);
       chdir(scd); 
       
       if(dc)
       {
          i = 0;
          while((dirc = readdir(dc)) != NULL)
          {
              //printf("\t%d\t%s\n", i, dirc->d_name);
              listDetails[i].sn   = i;   
              listDetails[i].name = dirc->d_name;   
              i++;
          }
          sortList(i);
          printDetails(i);
          closedir(dc);
       }
       
       user_read  = ((fileFoldStatus.st_mode &S_IRUSR) ? 1 : 0);
       user_write = ((fileFoldStatus.st_mode &S_IWUSR) ? 1 : 0);
       user_execute = ((fileFoldStatus.st_mode &S_IXUSR) ? 1 : 0);
        
       group_read = ((fileFoldStatus.st_mode &S_IRGRP) ? 1 : 0);
       group_write = ((fileFoldStatus.st_mode &S_IWGRP) ? 1 : 0);
       group_execute = ((fileFoldStatus.st_mode &S_IXGRP) ? 1 : 0);
        
       other_read = ((fileFoldStatus.st_mode &S_IROTH) ? 1 : 0);
       other_write = ((fileFoldStatus.st_mode &S_IWOTH) ? 1 : 0);
       other_execute = ((fileFoldStatus.st_mode &S_IXOTH) ? 1 : 0);
        
       printPermission(user_read, user_write, user_execute, group_read, group_write, group_execute, other_read, other_write, other_execute);
        
   }
   list_fileNfolder(".");
}