<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
    主站蜘蛛池模板: 亚洲自偷自拍另类12p| 亚洲一卡一卡二新区无人区 | 免费无码一区二区三区| 亚洲影视一区二区| 亚洲国产a级视频| 在线免费观看国产| 亚洲AV无码一区二区三区牲色| 免费一级大黄特色大片| 久久久久久久岛国免费播放 | 亚洲av中文无码| 亚洲精品免费视频| 精品久久久久久亚洲综合网| 久久久久亚洲精品无码系列| 四虎影院在线免费播放| 青青青国产手机频在线免费观看 | 久久er国产精品免费观看8| 亚洲电影在线免费观看| 亚洲无码黄色网址| 成人奭片免费观看| 久久香蕉国产线看免费| 国产成人高清亚洲一区91| 亚洲国产精品日韩在线观看| 久久久久无码专区亚洲av| 成熟女人牲交片免费观看视频| 中国人免费观看高清在线观看二区| 亚洲国产成+人+综合| 国产亚洲一区二区三区在线观看| 日韩精品免费一区二区三区| xxxx日本免费| 13小箩利洗澡无码视频网站免费| 日韩国产欧美亚洲v片| 亚洲国产福利精品一区二区| 亚洲av无码一区二区三区网站| 国产jizzjizz视频全部免费| 99久久99这里只有免费费精品| 免费无码黄网站在线看| 免费激情网站国产高清第一页| 亚洲日韩精品无码专区加勒比☆| 亚洲欧洲日韩国产综合在线二区| 在线亚洲精品自拍| 亚洲精品456播放|