Welcome 微信登录

首页 / 操作系统 / Linux / Linux中ls命令的实现

ls命令是Linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,下面我们就来一起看看ls的实现方法。Linux下ls命令的实现  http://www.linuxidc.com/Linux/2014-12/111079.htmls 命令:15个Linux面试级问题--第一集  http://www.linuxidc.com/Linux/2015-03/114895.htmls 命令:十条面试级问题--第二集  http://www.linuxidc.com/Linux/2015-04/115732.htm#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 ", argv[0] );
       return -1;
   }
   
   if ( !(dir=opendir(argv[1])) )
   {
       printf( "can not open %s ", argv[1] );
       return -1;
   }
   
   while ( (dirp=readdir(dir)) != NULL )
   {
       printf( "%s ", dirp->d_name );
   }
   
   closedir( dir );
   
   return 0;

对其中的几个重要结构体和函数解说一下。opendir
opendir()用来打开参数 name 指定的目录,并返回 DIR* 形态的
目录流,和 open()类似,接下来对目录的读取和搜索都要使用此返回值,
成功则返回 DIR* 型态的目录流,打开失败则返回 NULLreaddir()返回参数 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。本文永久更新链接地址