青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

自己寫的 LS 命令

        支持 -r --recursive 遞歸處理子目錄,-a 顯示隱藏文件,-l 顯示屬性,及這些參數的任意組合,可指定路徑,默認為當前目錄。

  1/*
  2作者
  3        coreBugZJ
  4        jinyang6655
  5
  6命令名
  7        ols
  8參數
  9    遞歸
 10        -r
 11        --recursive
 12    所有文件
 13        -a
 14    屬性
 15        -l
 16
 17使用方式舉例
 18        ols
 19        ols -r
 20        ols dirnameA -ra
 21        ols dirnameA dirnameB -l -a
 22*/

 23
 24
 25/*
 26幾個定義
 27
 28fullname        /home/dir/name.c
 29dirname         /home/dir
 30fullpath        /home/dir/
 31filename        name.c
 32*/

 33
 34
 35#include <stdio.h>
 36#include <sys/types.h>
 37#include <sys/stat.h>
 38#include <dirent.h>
 39#include <string.h>
 40#include <getopt.h>
 41#include <math.h>
 42#include <pwd.h>
 43#include <grp.h>
 44#include <time.h>
 45
 46        /* 文件名最大長度 */
 47#define  NAME_LEN   257
 48
 49
 50        /* 標志位,是否 -r */
 51#define  FLAG_R     1
 52        /* 標志位,是否 -a */
 53#define  FLAG_A     2
 54        /* 標志位,是否 -l */
 55#define  FLAG_L     4
 56
 57
 58        /* 定義函數類型,獨立于文件遍歷方式,處理被遍歷到的文件或文件夾 */
 59typedef  void (*DO_CMD_FILE)( const char *dirname, const char *filename, int flag );
 60
 61
 62        /*
 63        文件遍歷,獨立于對文件的處理方式,由參數 函數指針決定對遍歷到的文件如何處理,
 64        flag 中標志位 FLAG_R 是否為 1 決定是否遍歷子目錄
 65        */

 66#define  QUE_LEN   (1024*32)
 67char queDirName[ QUE_LEN ][ NAME_LEN ];
 68int  queHead, queTail;
 69
 70void do_cmd( const char *dirname, DO_CMD_FILE do_cmd_file, int flag ) {
 71        DIR           *dir_ptr;
 72        struct dirent *dirent_ptr;
 73        struct stat   info;
 74        char          dirName[ NAME_LEN ] = "", fullPath[ NAME_LEN ] = "", fullName[ NAME_LEN ] = "";
 75
 76        queHead = 0;
 77        queTail = 1;
 78        strcpy( queDirName[ 0 ], dirname );
 79
 80        while ( queHead != queTail ) {
 81                strcpy( dirName, queDirName[ queHead ] );
 82                strcpy( fullPath, dirName );
 83                strcat( fullPath, "/" );
 84                dir_ptr = opendir( dirName );
 85                queHead = ( queHead + 1 ) % QUE_LEN;
 86                if ( NULL == dir_ptr ) {
 87                        continue;
 88                }

 89                printf( "%-32s ---------------------\n", fullPath );
 90                while ( NULL != ( dirent_ptr = readdir(dir_ptr) ) ) {
 91                        strcpy( fullName, fullPath );
 92                        strcat( fullName, dirent_ptr->d_name );
 93                        if ( -1 == stat( fullName, &info ) ) {
 94                                continue;
 95                        }

 96                        do_cmd_file( dirName, dirent_ptr->d_name, flag );
 97                        if ( ! S_ISDIR(info.st_mode) ) {
 98                                continue;
 99                        }

100                        if ( 0 == strcmp( ".", dirent_ptr->d_name ) ) {
101                                continue;
102                        }

103                        if ( 0 == strcmp( "..", dirent_ptr->d_name ) ) {
104                                continue;
105                        }

106                        strcpy( queDirName[ queTail ], fullName );
107                        queTail = ( queTail + 1 ) % QUE_LEN;
108                        if ( queTail == queHead ) {
109                                fprintf( stderr, "error : buffer is full !\n" );
110                                break;
111                        }

112                }

113                closedir( dir_ptr );
114                printf( "\n" );
115                if ( 0 == (flag & FLAG_R) ) {
116                        break;
117                }

118        }

119}

120
121
122        /* 由模式得到字符串 */
123char* mode2str( int mode );
124        /* 由 uid 得到名字 */
125char* uid2name( uid_t uid );
126        /* 由 gid 得到名字 */
127char* gid2name( gid_t gid );
128
129
130        /* 處理遍歷到的文件或文件夾,由 flag 標志位決定處理方式 */
131void do_ls_file( const char *dirname, const char *filename, int flag ) {
132        struct stat inf;
133        char   fullName[ NAME_LEN ], modstr[ 13 ];
134        if ( ('.' == filename[ 0 ]) && (0 == (FLAG_A & flag)) ) {
135                return;
136        }

137        if ( 0 == (FLAG_L & flag) ) {
138                printf( "%s\n", filename );
139                return;
140        }

141        strcpy( fullName, dirname );
142        strcat( fullName, "/" );
143        strcat( fullName, filename );
144        if ( -1 == stat( fullName, &inf ) ) {
145                return;
146        }

147        printf( "%s ",    mode2str(inf.st_mode) );
148        printf( "%5d ",   (int)(inf.st_nlink)   );
149        printf( "%-8s ",  uid2name(inf.st_uid)  );
150        printf( "%-8s ",  gid2name(inf.st_gid)  );
151        printf( "%8ld ",  (long)(inf.st_size)   );
152        printf( "%.12s ", ctime(&(inf.st_mtime)) );
153        printf( "%s\n",  filename );
154}

155
156
157void do_ls( const char *dirname, int flag ) {
158        do_cmd( dirname, do_ls_file, flag );
159}

160
161
162        /* 解析命令參數,設置 flag 標志位 */
163int main( int argc, char *argv[] ) {
164        struct option longopts[] = {
165                "recursive"0, NULL, 'r' },
166                { NULL,        0, NULL, 0   }
167        }
;
168        char *shortopts = "ral";
169
170        int  ac = argc, opt, i, flag = 0, cur = 1;
171        char **av = argv;
172        for ( ; ; ) {
173                opt = getopt_long( ac, av, shortopts, longopts, NULL );
174                if ( -1 == opt ) {
175                        break;
176                }

177                switch ( opt ) {
178                case 'r' : 
179                        flag |= FLAG_R;
180                        break;
181                case 'a' : 
182                        flag |= FLAG_A;
183                        break;
184                case 'l' : 
185                        flag |= FLAG_L;
186                        break;
187                case ':' :
188                        printf( "error !\n" );
189                        break;
190                case '?' : 
191                        printf( "\nusage:\nols\nols -lar\nols /tmp\nols /tmp /usr --recursive\n" );
192                        return 0;
193                }

194        }

195
196        for ( i = 1; i < argc; ++i ) {
197                if ( '-' != argv[ i ][ 0 ] ) {
198                        do_ls( argv[ i ], flag );
199                        cur = 0;
200                }

201        }

202        if ( cur ) {
203                do_ls( ".", flag );
204        }

205
206        return 0;
207}

208
209
210char* mode2str( int mode ) {
211        static char str[ 20 ];
212
213        strcpy( str, "----------" );
214
215        if ( S_ISDIR(mode) ) str[ 0 ] = 'd';
216        if ( S_ISCHR(mode) ) str[ 0 ] = 'c';
217        if ( S_ISBLK(mode) ) str[ 0 ] = 'b';
218
219        if ( mode & S_IRUSR ) str[ 1 ] = 'r';
220        if ( mode & S_IWUSR ) str[ 2 ] = 'w';
221        if ( mode & S_IXUSR ) str[ 3 ] = 'x';
222
223        if ( mode & S_IRGRP ) str[ 4 ] = 'r';
224        if ( mode & S_IWGRP ) str[ 5 ] = 'w';
225        if ( mode & S_IXGRP ) str[ 6 ] = 'x';
226
227        if ( mode & S_IROTH ) str[ 7 ] = 'r';
228        if ( mode & S_IWOTH ) str[ 8 ] = 'w';
229        if ( mode & S_IXOTH ) str[ 9 ] = 'x';
230
231        return str;
232}

233
234char* uid2name( uid_t uid ) {
235        static char numstr[ 32 ];
236        struct passwd *getpwuid(), *pw_ptr;
237
238        if ( NULL == (pw_ptr = getpwuid(uid)) ) {
239                sprintf( numstr, "%d", uid );
240                return numstr;
241        }

242        return pw_ptr->pw_name;
243}

244
245char* gid2name( gid_t gid ) {
246        static char numstr[ 32 ];
247        struct group *getgrgid(), *grp_ptr;
248
249        if ( NULL == (grp_ptr = getgrgid(gid)) ) {
250                sprintf( numstr, "%d", gid );
251                return numstr;
252        }

253        return grp_ptr->gr_name;
254}

255
256


posted on 2011-11-22 21:13 coreBugZJ 閱讀(726) 評論(0)  編輯 收藏 引用 所屬分類: LinuxOperatingSystem課內作業

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜国产精品视频| 亚洲黄色片网站| 欧美 日韩 国产 一区| 亚洲一区3d动漫同人无遮挡| 亚洲素人在线| 国产精品99久久久久久www| 亚洲最快最全在线视频| 亚洲一级免费视频| 久久av一区二区三区漫画| 久久久久久久久久久久久女国产乱 | 欧美日韩另类一区| 国产精品成人一区| 国产日韩欧美三区| 亚洲黄色免费网站| 亚洲一区一卡| 免费在线欧美黄色| 亚洲美女中出| 久久久www成人免费精品| 欧美成人免费网| 欧美性视频网站| 国模私拍一区二区三区| 亚洲少妇最新在线视频| 久久综合久久综合久久综合| 欧美激情精品久久久久久黑人| 一本一本久久a久久精品牛牛影视| 欧美亚洲免费| 欧美日韩精品不卡| 1024成人网色www| 午夜精品久久久久久久99樱桃| 老鸭窝亚洲一区二区三区| 亚洲精品国精品久久99热一| 欧美在线视频在线播放完整版免费观看| 久久深夜福利免费观看| 国产精品地址| 日韩视频免费在线观看| 久久久国产精品亚洲一区| 最新国产乱人伦偷精品免费网站| 久久国产福利| 欧美α欧美αv大片| 亚洲欧美国产不卡| 欧美日韩性视频在线| 在线日韩欧美视频| 欧美一区二区三区精品| 亚洲伦理中文字幕| 欧美激情精品久久久久久大尺度| 黄色一区三区| 久久精品人人做人人爽| 亚洲一区二区三区精品在线观看| 模特精品在线| 亚洲国产精品999| 麻豆视频一区二区| 久久激情视频久久| 亚洲尤物在线| 亚洲美女诱惑| 欧美伦理在线观看| 亚洲美女黄网| 亚洲精品久久久久久久久久久| 久久综合激情| 永久免费视频成人| 久久艳片www.17c.com| 欧美在线视频免费| 狠狠色丁香久久综合频道 | 国产精品人人爽人人做我的可爱| 99re热这里只有精品免费视频| 欧美成人网在线| 欧美一区二区观看视频| 国产综合久久| 欧美福利网址| 欧美久久在线| 亚洲综合日韩| 欧美一级在线视频| 在线观看日韩www视频免费| 美女尤物久久精品| 欧美成人一区在线| 亚洲午夜久久久久久尤物 | 一本色道久久综合亚洲精品按摩| 欧美日本不卡视频| 日韩写真在线| 亚洲视频一二区| 亚洲欧美日韩精品在线| 国产精品视频网| 久久精品国产精品| 久久综合国产精品| 日韩午夜av在线| 亚洲一区二区av电影| 国产一区二区三区在线播放免费观看| 久热精品视频在线观看一区| 老司机精品视频网站| 中国成人亚色综合网站| 亚洲欧美日本国产有色| 亚洲国产高潮在线观看| 亚洲精品综合| 国产一区视频网站| 亚洲国产成人91精品| 欧美日韩精品一区二区| 欧美一区网站| 欧美精品123区| 亚洲欧美激情视频在线观看一区二区三区| 国产日韩欧美成人| 亚洲欧洲中文日韩久久av乱码| 国产精品欧美在线| 欧美电影在线播放| 国产精品夜夜嗨| 亚洲国产精品欧美一二99| 国产精品夜夜夜| 亚洲精品免费看| 欧美性视频网站| 美女亚洲精品| 国产精品亚发布| 免费观看成人| 一本色道久久综合亚洲精品不 | 亚洲一区二区高清视频| 亚洲国产精选| 欧美亚洲一区在线| 亚洲欧美精品suv| 欧美成人午夜激情| 美女视频黄a大片欧美| 国产精品美女黄网| 亚洲欧洲日产国码二区| 亚洲福利视频网| 欧美一区二区三区免费看| 亚洲午夜av在线| 欧美激情aⅴ一区二区三区| 久久夜色精品国产亚洲aⅴ| 欧美色欧美亚洲高清在线视频| 欧美黑人多人双交| 久久狠狠婷婷| 欧美在线观看视频一区二区三区 | 国产日韩一区二区三区| 一区二区三区国产精品| 99视频日韩| 欧美精品二区| 亚洲国内在线| 9色porny自拍视频一区二区| 免费在线欧美黄色| 欧美黑人国产人伦爽爽爽| 在线看日韩欧美| 久久夜色精品国产欧美乱| 麻豆91精品| 一区福利视频| 久久夜色精品国产| 欧美高清视频在线播放| 一区免费观看| 麻豆久久精品| 亚洲欧洲一区二区三区在线观看 | 亚洲区中文字幕| 美女黄毛**国产精品啪啪| 欧美成人嫩草网站| 亚洲精选一区| 欧美午夜视频在线| 亚洲午夜精品一区二区三区他趣 | 91久久精品日日躁夜夜躁国产| 久久米奇亚洲| 亚洲国产精品一区制服丝袜| 99在线精品视频在线观看| 欧美网站在线| 性做久久久久久久久| 母乳一区在线观看| 一级成人国产| 国产日韩一区在线| 久久成人一区二区| 亚洲高清精品中出| 亚洲欧美视频一区二区三区| 国产在线高清精品| 欧美护士18xxxxhd| 亚洲欧美在线播放| 亚洲高清视频一区二区| 亚洲香蕉视频| 国产专区精品视频| 一区二区三区高清在线| 羞羞色国产精品| 中文在线不卡视频| 欧美不卡在线| 久久久噜噜噜| 国产精品jvid在线观看蜜臀| 国产区日韩欧美| 亚洲欧美一区二区三区久久| 欧美成人福利视频| 性欧美videos另类喷潮| 欧美不卡激情三级在线观看| 亚洲国产欧美另类丝袜| 1024日韩| 国产精品劲爆视频| 午夜电影亚洲| 男女视频一区二区| 亚洲丝袜av一区| 亚洲电影欧美电影有声小说| 国产精品久久999| 久久久久久网站| 亚洲视频免费在线观看| 免费在线亚洲| 久久不射网站| 日韩一级成人av| 在线看一区二区| 国产亚洲一区在线| 国产精品一区二区久久久久| 欧美人妖在线观看| 欧美 日韩 国产精品免费观看| 亚洲图片自拍偷拍| 一本色道久久加勒比精品|