歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux中ls命令的實現

Linux中ls命令的實現

日期:2017/2/28 13:58:59   编辑:Linux教程

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 %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。

Copyright © Linux教程網 All Rights Reserved