Linux中ls命令的实现

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

Linux下ls命令的实现

ls 命令:15个Linux面试级问题–第一集

ls 命令:十条面试级问题–第二集

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

opendir函数:

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

ls的简要实现:

写makefile

运行测试:

————————————–分割线 ————————————–

见下面程序:

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

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;}

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

opendiropendir()用来打开参数 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。

本文永久更新链接地址:

勇于接受自己的失败,告诉自己,这就是自己的现实,

Linux中ls命令的实现

相关文章:

你感兴趣的文章:

标签云: