程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ls的實現還不完整

ls的實現還不完整

編輯:C++入門知識

print?#include <pwd.h>  
#include <grp.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <dirent.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
 
void do_ls(char *); 
void do_stat(char *); 
void show_file_info(char *, struct stat *); 
void mode_to_letters(int, char[]); 
char *uid_to_name(uid_t); 
char *gid_to_name(gid_t); 
 
int main(int argc, char *argv[]) 

    if (argc == 1) 
        do_ls("."); 
    else 
        while (--argc) 
        {    
            printf("%s:\n", *++argv); 
            do_ls(*argv); 
        }    

 
void do_ls(char *dirname) 

    DIR *dir_ptr;               /* the directory */ 
    struct dirent *direntp;     /* each entry*/ 
     
    if ((dir_ptr = opendir(dirname)) == NULL) 
        fprintf(stderr, "ls1 : cannot open %s\n", dirname); 
    else 
    {    
        while ((direntp = readdir(dir_ptr)) != NULL) 
        {    
            do_stat(direntp->d_name); 
        }    
 
        closedir(dir_ptr); 
    }    

 
void do_stat(char *filename) 

    struct stat info; 
 
    if (stat(filename, &info) == -1) 
        perror(filename); 
    else 
        show_file_info(filename, &info); 

 
void show_file_info(char *filename, struct stat *info_p) 

    char modestr[10]; 
 
    mode_to_letters(info_p->st_mode, modestr); 
 
    printf("%s ", modestr); 
    printf("%4d ", (int)info_p->st_nlink); 
    printf("%-8s ", uid_to_name(info_p->st_uid)); 
    printf("%-8s ", uid_to_name(info_p->st_gid)); 
    printf("%8ld ", (long)info_p->st_size); 
    printf("%.12s ", 4 + ctime(&info_p->st_mtime)); 
    printf("%s\n", filename); 

 
void mode_to_letters(int mode, char str[]) 

    strcpy(str, "----------"); 
 
    if (S_ISDIR(mode)) str[0] = 'd'; 
    if (S_ISCHR(mode)) str[0] = 'c'; 
    if (S_ISBLK(mode)) str[0] = 'b'; 
 
    if (mode & S_IRUSR) str[1] = 'r';   /* 3 bits for user */ 
    if (mode & S_IWUSR) str[2] = 'w'; 
    if (mode & S_IXUSR) str[3] = 'x'; 
 
    if (mode & S_IRGRP) str[4] = 'r';   /* 3 bits for group */ 
    if (mode & S_IWGRP) str[5] = 'w'; 
    if (mode & S_IXGRP) str[6] = 'x'; 
 
    if (mode & S_IROTH) str[7] = 'r';   /* 3 bits for other */ 
    if (mode & S_IWOTH) str[8] = 'w'; 
    if (mode & S_IXOTH) str[9] = 'x'; 

 
char *uid_to_name(uid_t uid) 

    struct passwd *pw_ptr; 
    static char numstr[10]; 
 
    if ((pw_ptr = getpwuid(uid)) == NULL) 
    { 
        sprintf(numstr, "%d", uid); 
        return numstr; 
    } 
    else 
        return pw_ptr->pw_name; 

 
char *gid_to_name(gid_t gid) 

    struct group *grp_ptr; 
    static char numstr[10]; 
 
    if ((grp_ptr = getgrgid(gid))== NULL) 
    { 
        sprintf(numstr, "%d", gid); 
        return numstr; 
    } 
    else 
        return grp_ptr->gr_name; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved