2021-05-12 14:32:11
Linux中ls命令的實現
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
相關文章