linux下ls命令的编写

ubuntu 14.04.2

ls命令用来读取目录,工作方式如下:

open directory

read directory    -end of dir?

display file info       |

close directory<———————

  与普通文件不同的是,目录文件永远不为空。每个目录至少包含两个特殊的项‘.’和‘..’,其中’.’代表当前目录,‘..’代表上一级目录。因此,”cd ..”命令会返回上一级目录。
如何读取目录内容?

readdir函数

  使用man readdir命令可以看到,这个函数在dirent.h里面声明(user/include/dirent.h),用来读取目录中的记录,返回一个指向当前目录记录的指针struct dirent* ,这个结构体具体是:
  

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 */

};

其中,d_name用来存放文件名,有了它我们就可以编写简单的ls命令,读取当前目录下的文件名了。具体过程与从文件读取数据类似,opendir打开一个目录,readdir读取内容,closedir关闭目录

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

void do_ls(char[]);

main(int ac,char* av[]) 
{
    if(ac == 1) 
        do_ls(".");
    else
        while( --ac){
            printf("%s:\n",* ++av);
            do_ls( *av);
        }
}
void do_ls(char dirname[])
{
    DIR* dir_ptr;
    struct dirent* direntp;

if((dir_ptr = opendir(dirname)) == NULL)
    fprintf(stderr,"ls1:cannot open % s\n",dirname);
else
{
    while((direntp = readdir(dir_ptr))!=NULL)
        printf("%s\n",direntp -> d_name);
    closedir(dir_ptr);
}
}

参考文献 《Linux/unix编程实践教程》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值