<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    選擇java 進入自由開放的國度

    隨筆 - 49, 文章 - 3, 評論 - 154, 引用 - 1
    數(shù)據(jù)加載中……

    linux中命令ls的實現(xiàn)

    基本實現(xiàn)了明令ls -l的功能,能顯示列表,但還有如下缺陷:結(jié)果沒有排序,不能顯示總大小,不能顯示其他目錄下的文件列表。

    程序中使用了掩碼的技術(shù)來實現(xiàn)數(shù)值到文件類型、文件權(quán)限列表字符串的轉(zhuǎn)換,使用命令getpwuid(uid_t uid)將用戶id轉(zhuǎn)換為名子,使用getgrgid(gid_t gid)將組id轉(zhuǎn)換為組名。

    下面是代碼:
    ??1?#include?<stdio.h>
    ??2?#include?<sys/types.h>
    ??3?#include?<sys/stat.h>
    ??4?#include?<dirent.h>
    ??5?#include?<string.h>
    ??6?
    ??7?void?do_ls(char[]);
    ??8?void?dostat(char?*);
    ??9?void?show_file_info(char?*filename,?struct?stat?*buf);
    ?10?void?mode_to_letters(int,?char[]);
    ?11?char?*uid_to_name(uid_t);
    ?12?char?*gid_to_name(gid_t);
    ?13?
    ?14?main(int?ac,?char?*av[])
    ?15?{
    ?16???if?(ac?==?1)
    ?17???????do_ls(".");
    ?18???else
    ?19???????while(--ac)
    ?20???????{
    ?21?????????printf("%s:?\n",?*++av);
    ?22?????????do_ls(*av);
    ?23???????}
    ?24?}
    ?25?
    ?26?void?do_ls(char?dirname[])
    ?27?{
    ?28???/*
    ?29????*?list?files?in?directory?called?dirname
    ?30????*/
    ?31????
    ?32???DIR?*dir_ptr;?????????????//the?directory
    ?33???struct?dirent?*direntp;???//each?entry
    ?34???
    ?35???if(?(dir_ptr?=?opendir(dirname))?==?NULL)
    ?36??????fprintf(stderr,?"ls1:cannot?open?%s\n",?dirname);
    ?37???else
    ?38???{
    ?39?????while?(?(direntp?=?readdir(dir_ptr))?!=?NULL)
    ?40?????????dostat(direntp->d_name);
    ?41?????
    ?42?????closedir(dir_ptr);
    ?43???}
    ?44???
    ?45?}
    ?46?
    ?47?
    ?48?void?dostat(char?*filename)
    ?49?{
    ?50???struct?stat?info;
    ?51???if?(stat(filename,?&info)?==?-1)
    ?52??????perror(filename);
    ?53???else
    ?54??????show_file_info(filename,?&info);
    ?55?}
    ?56?
    ?57?void?show_file_info(char?*filename,?struct?stat?*buf)
    ?58?{
    ?59???/*
    ?60????*?display?some?info?stat?in?a?name?=?value?formant
    ?61????*/
    ?62????char?*uid_to_name(uid_t);
    ?63????char?*?ctime(time_t?*);
    ?64????char?*?gid_to_name(gid_t),?filemode();
    ?65????//void?mode_to_letters();
    ?66????char?modestr[11];
    ?67????
    ?68????mode_to_letters(buf->st_mode,?modestr);
    ?69????
    ?70????printf("%s",?modestr);
    ?71????printf("%4d",??buf->st_nlink);
    ?72????printf("%-8s",???uid_to_name(buf->st_uid));
    ?73????printf("%-8s",??gid_to_name(buf->st_gid));
    ?74????printf("%8ld",???(long)buf->st_size);
    ?75????//printf("modtime:%d\n",buf->st_mtime);
    ?76????printf("%.12s",4+ctime(&buf->st_mtime));
    ?77????printf("%s\n",?filename);??
    ?78????
    ?79?}
    ?80?
    ?81?/*
    ?82??*?utility?functions
    ?83??*/
    ?84?
    ?85?void?mode_to_letters(int?mode,?char?str[])
    ?86?{
    ?87???strcpy(str,?"----------");
    ?88???
    ?89???if(S_ISDIR(mode))?str[0]?=?'d';
    ?90???if(S_ISCHR(mode))?str[0]?=?'c';
    ?91???if(S_ISBLK(mode))?str[0]?=?'b';
    ?92???
    ?93???if(mode?&?S_IRUSR)?str[1]?=?'r';
    ?94???if(mode?&?S_IWUSR)?str[2]?=?'w';
    ?95???if(mode?&?S_IXUSR)?str[3]?=?'x';
    ?96???
    ?97???if(mode?&?S_IRGRP)?str[4]?=?'r';
    ?98???if(mode?&?S_IWGRP)?str[5]?=?'w';
    ?99???if(mode?&?S_IXGRP)?str[6]?=?'x';
    100???
    101???if(mode?&?S_IROTH)?str[7]?=?'r';
    102???if(mode?&?S_IWOTH)?str[8]?=?'w';
    103???if(mode?&?S_IXOTH)?str[9]?=?'x';??
    104?}
    105?
    106?#include?<pwd.h>
    107?
    108?char?*uid_to_name(uid_t?uid)
    109?/*
    110??*?returns?pointer?to?username?associated?with?uid,?uses?getpw()
    111??*/
    112?{
    113???struct?passwd??*pw_ptr;
    114???static?char?numstr[10];
    115???
    116???if(?(pw_ptr?=?getpwuid(uid))?==?NULL)
    117???{
    118?????printf(numstr,?"%d",?uid);
    119?????return?numstr;
    120???}
    121???else
    122?????return?pw_ptr->pw_name;
    123?}
    124?
    125?#include?<grp.h>
    126?
    127?char?*gid_to_name(gid_t?gid)
    128?{
    129???struct?group?*grp_ptr;
    130???static?char?numstr[10];
    131???
    132???if?((grp_ptr?=?getgrgid(gid))?==?NULL)
    133???{
    134?????sprintf(numstr,?"%d",?gid);
    135?????return?numstr;
    136???}
    137???else
    138?????return?grp_ptr->gr_name;
    139?}
    140???
    141?

    爭取早日將其他功能實現(xiàn)。

    posted on 2006-03-27 08:47 soochow_hhb 以java論成敗 以架構(gòu)論英雄 閱讀(1504) 評論(2)  編輯  收藏 所屬分類: Reading

    評論

    # re: linux中命令ls的實現(xiàn)  回復(fù)  更多評論   

    閣下的代碼很眼熟啊
    2006-11-04 16:06 | 1jjk

    # re: linux中命令ls的實現(xiàn)  回復(fù)  更多評論   

    順便問一下
    實現(xiàn)ls -l /dev
    怎么做呢?
    2006-11-04 16:07 | 1jjk
    主站蜘蛛池模板: 四虎影视在线永久免费看黄| 亚洲一级毛片免费看| 免费一级毛片免费播放| 在线观看亚洲AV每日更新无码| 欧洲一级毛片免费| 亚洲一线产区二线产区精华| 久九九精品免费视频| 亚洲AV无码国产精品色| 97人伦色伦成人免费视频| 亚洲av日韩aⅴ无码色老头| 午夜两性色视频免费网站| 日韩国产欧美亚洲v片 | 亚洲a视频在线观看| 国产va免费精品观看精品| 亚洲午夜福利在线视频| 国产成人无码区免费A∨视频网站| 亚洲AV无码AV日韩AV网站| 亚洲国产精品无码久久九九| 两个人看的www高清免费观看| 亚洲乱亚洲乱淫久久| 日韩精品成人无码专区免费 | 中文亚洲成a人片在线观看| EEUSS影院WWW在线观看免费| 国产成A人亚洲精V品无码性色| 99精品视频免费观看| 456亚洲人成影院在线观| 全部免费毛片免费播放| a在线免费观看视频| 国产精品高清视亚洲精品| 国产99视频免费精品是看6| 一级毛片在线免费播放| 亚洲最新视频在线观看| 嫩草视频在线免费观看| 一级毛片免费在线| 91亚洲视频在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲欧洲国产精品香蕉网| av无码久久久久不卡免费网站| 亚洲AV永久无码精品网站在线观看| 中文字幕在线亚洲精品 | 成人特级毛片69免费观看|