ls用于列举目录内容,要实现这个功能,毫无疑问,需要读取目录,涉及到两个api:

opendir:DIR *opendir(const char *name), 传文件名,返回一个指针,指向目录序列

readdir:struct dirent *readdir(DIR *dirp), 把opendir的返回值传过来,   返回值为一个结构体

        struct dirent {
               ino_t          d_ino;       /* inode number */
               off_t          d_off;       /* not an offset; see NOTES */
               unsigned short d_reclen;    /* length of this record */
               unsigned char  d_type;      /* type of file; not supported
                                              by all filesystem types */
               char           d_name[256]; /* filename */
           };

有了这两个api,就可以实现一个简易的ls功能

 1 /*================================================================
 2 *   Copyright (C) 2018 . All rights reserved.
 3 *   
 4 *   文件名称:myls.c
 5 *   创 建 者:ghostwu(吴华)
 6 *   创建日期:2018年01月09日
 7 *   描    述: ls命令
 8 *
 9 ================================================================*/
10 
11 #include <stdio.h>
12 #include <sys/types.h>
13 #include <dirent.h>
14 #include <stdlib.h>
15 
16 void do_ls( char [] );
17 
18 int main(int argc, char *argv[])
19 {
20     if( argc == 1 ) {
21         do_ls( "." );
22     }else {
23         while( --argc ) {
24             printf( "arg=%s\n", * ++argv );
25             do_ls( *argv );
26         }
27     }
28     return 0;
29 }
30 
31 void do_ls( char dir_entry[] ) {
32     DIR* pDir;
33     struct dirent* pCurDir;
34     if( ( pDir = opendir( dir_entry ) ) == NULL ){
35         perror( "read dir" );
36         exit( -1 );
37     }else {
38         while( ( pCurDir = readdir( pDir ) ) != NULL ) {
39             printf( "%s\n", pCurDir->d_name );
40         }
41     }
42 }
View Code

相关文章: