首頁 > 軟體

Linux中ls命令的實現

2020-06-16 17:55:22

ls命令是Linux下最常用的命令之一,ls跟dos下的dir命令是一樣的都是用來列出目錄下的檔案,下面我們就來一起看看ls的實現方法。

Linux下ls命令的實現  http://www.linuxidc.com/Linux/2014-12/111079.htm

ls 命令:15個Linux面試級問題--第一集  http://www.linuxidc.com/Linux/2015-03/114895.htm

ls 命令:十條麵試級問題--第二集  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 n", argv[0] );
        return -1;
    }
   
    if ( !(dir=opendir(argv[1])) )
    {
        printf( "can not open %sn", argv[1] );
        return -1;
    }
   
    while ( (dirp=readdir(dir)) != NULL )
    {
        printf( "%sn", 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。

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-08/121704.htm


IT145.com E-mail:sddin#qq.com