linux中ls命令怎么实现的,Linux中ls命令的实现

ls命令是Linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,下面我们就来一起看看ls的实现方法。

#include

是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型,例如opendir函数、readdir函数.

opendir函数:

DIR *opendir(const char *pathname);返回值:若成功则返回指针,若出错则返回NULL。

struct dirent *readdir(DIR *dp); 返回值:若成功则返回指针,若在目录结尾或出错则返回NULL。

ls的简要实现:

d9309886bdfae2bedde45bbe315295f5.png

写makefile

a805f6c692ea10b8aa27f21078fe4dc0.png

运行测试:

b7d2498d072739382c283474df9754eb.png

--------------------------------------分割线 --------------------------------------

见下面程序:

#include

#include

#include

int main( int argc, int *argv[] )

{

DIR                *dir;

struct dirent    *dirp;

if ( argc != 2 )

{

printf( "usage: %s directory_name \n", argv[0] );

return -1;

}

if ( !(dir=opendir(argv[1])) )

{

printf( "can not open %s\n", argv[1] );

return -1;

}

while ( (dirp=readdir(dir)) != NULL )

{

printf( "%s\n", dirp->d_name );

}

closedir( dir );

return 0;

}

对其中的几个重要结构体和函数解说一下。

opendir

opendir()用来打开参数 name 指定的目录,并返回 DIR* 形态的

目录流,和 open()类似,接下来对目录的读取和搜索都要使用此返回值,

成功则返回 DIR* 型态的目录流,打开失败则返回 NULL

readdir()返回参数 dir 目录流的下个目录进入点。    结构 dirent 定义

如下:

struct dirent

{

long d_ino;                /* inode number */索引节点号

off_t d_off;                /* offset to this dirent */在目录文件中的偏移

unsigned short d_reclen;    /* length of this d_name */文件名长

unsigned char d_type;        /* the type of d_name */文件类型

char d_name [NAME_MAX+1];  /* file name (null-terminated) */文件名,最长255字符

}

成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回 NULL。

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值