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

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)  編輯 收藏 引用 所屬分類: Linux 、OperatingSystem 、課內作業

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久99| 国产精品一区在线观看| 久久久久一本一区二区青青蜜月| 一区二区三区在线视频免费观看 | 亚洲永久免费av| 99国产精品自拍| 亚洲免费高清| 亚洲精品中文在线| 91久久精品国产91久久| 久久尤物视频| 美日韩精品视频| 欧美高清视频一二三区| 老司机成人网| 亚洲高清视频在线观看| 一本色道久久综合狠狠躁的推荐| 欧美激情第六页| 99re在线精品| 久久精品日产第一区二区| 久久手机免费观看| 欧美日韩人人澡狠狠躁视频| 欧美视频中文一区二区三区在线观看| 欧美天堂亚洲电影院在线观看 | 国语自产精品视频在线看| 欧美亚洲综合另类| 欧美一区二区三区精品| 欧美激情第六页| 亚洲视频综合| 亚洲欧美日韩精品综合在线观看| 欧美日韩久久| 日韩一区二区免费高清| 欧美色综合网| 亚洲国产精品久久91精品| 亚洲免费中文| 激情五月综合色婷婷一区二区| 亚洲人成人77777线观看| 先锋影音久久| 亚洲啪啪91| 欧美二区在线看| 一本大道久久a久久精品综合| 欧美成人性网| 欧美连裤袜在线视频| 99www免费人成精品| 99国产精品久久久久久久成人热| 欧美xart系列高清| 亚洲欧洲一区二区天堂久久| 亚洲国产乱码最新视频| 欧美日韩的一区二区| av成人老司机| 亚洲图片你懂的| 国产日韩欧美综合精品| 久久综合伊人77777尤物| 欧美电影打屁股sp| 欧美激情精品久久久久久黑人 | 久久久久一区二区| 亚洲国产精品一区二区第一页| 欧美色区777第一页| 裸体歌舞表演一区二区| 欧美ab在线视频| 欧美在线视频a| 午夜在线观看免费一区| 香蕉精品999视频一区二区| 麻豆av福利av久久av| 久久午夜视频| 亚洲国产一区二区三区高清| 欧美视频一区| 久久精品亚洲一区| 欧美久久在线| 欧美在线视频一区二区| 欧美精彩视频一区二区三区| 午夜老司机精品| 欧美高清在线一区| 久久久久久夜| 国产精品久久久一区麻豆最新章节| 麻豆国产精品777777在线| 国产精品日韩在线一区| 亚洲激情婷婷| 尤物精品国产第一福利三区| 羞羞视频在线观看欧美| 亚洲一区二区在线播放| 亚洲视频视频在线| 一区二区欧美亚洲| 一道本一区二区| 久热精品在线视频| 毛片基地黄久久久久久天堂| 欧美视频在线观看一区二区| 欧美高清在线视频| 亚洲精品视频中文字幕| 欧美精品一区二区三区视频| 久久久久久久尹人综合网亚洲| 欧美亚州在线观看| 亚洲欧美视频在线观看| 久久精品视频在线| 激情欧美一区二区三区| 久久免费的精品国产v∧| 欧美成人一区二区在线| 91久久亚洲| 欧美视频在线免费| 欧美专区中文字幕| 欧美国产精品| 亚洲一区二区三区三| 国产日韩欧美不卡在线| 嫩草影视亚洲| 亚洲国产高清在线观看视频| 快播亚洲色图| 欧美影院午夜播放| 91久久精品网| 久久久噜噜噜久久| 99国内精品久久| 精品成人a区在线观看| 欧美天天视频| 欧美日韩一区三区| 欧美大秀在线观看 | 欧美日韩黄色大片| 欧美一区二区精品在线| 亚洲午夜一级| 亚洲最新视频在线| 亚洲精品麻豆| av成人免费在线| 欧美高清在线一区| 欧美高清视频一区| 欧美国产三区| 亚洲精品一区二区三区樱花 | 亚洲日本aⅴ片在线观看香蕉| 国产丝袜一区二区| 国产一区二区三区电影在线观看| 国产精品99久久久久久久女警| 亚洲国产欧美一区二区三区久久| 久久精品成人欧美大片古装| 亚洲一区久久久| 午夜精品一区二区在线观看| 亚洲午夜电影在线观看| 亚洲欧美国产高清| 91久久国产综合久久| 亚洲婷婷在线| 蜜臀久久久99精品久久久久久 | 精品成人一区二区三区| 亚洲愉拍自拍另类高清精品| 亚洲第一区在线观看| 久久久欧美一区二区| 国产精品国产成人国产三级| 亚洲主播在线播放| 亚洲一区中文| 一区二区三区在线观看视频| 亚洲欧美一区二区精品久久久| 亚洲国产成人av在线| 毛片一区二区三区| 国产一区视频观看| 午夜综合激情| 日韩香蕉视频| 欧美日韩视频在线一区二区 | 国内精品久久久久影院色| 久久精品亚洲精品国产欧美kt∨| 91久久精品视频| 欧美激情第3页| 亚洲一区二区四区| 亚洲伦理中文字幕| 国产精品―色哟哟| 欧美1区视频| 久久在线免费观看| 亚洲靠逼com| 欧美一区二区三区另类| 在线看不卡av| 亚洲午夜av在线| 亚洲国产精品久久久久婷婷884 | 日韩香蕉视频| 欧美久久婷婷综合色| 亚洲影视中文字幕| 久久av在线看| 日韩视频在线观看国产| 亚洲一区二区精品在线观看| 狠狠色狠狠色综合日日tαg| 亚洲日韩欧美视频一区| 国产一区二区三区久久精品| 噜噜噜久久亚洲精品国产品小说| 亚洲一区久久久| 麻豆精品视频在线| 久久成人精品电影| 欧美伦理在线观看| 久久婷婷人人澡人人喊人人爽| 久久综合国产精品| 亚洲欧美成人| 亚洲视频免费在线| 欧美精品日韩三级| 久久超碰97人人做人人爱| 国产精品久久久一本精品| 亚洲欧美综合精品久久成人 | 亚洲国产三级在线| 欧美高清一区| 亚洲欧洲精品一区二区三区 | 激情综合色综合久久| 欧美亚洲三级| 久久综合色8888| 国产伊人精品| 久久精品国产欧美亚洲人人爽| 久久九九精品99国产精品| 国产一区二区精品在线观看| 久久久91精品| 亚洲娇小video精品| 亚洲视屏一区| 激情久久久久久|