C linux下實現ls 函式遍歷目錄

2022-09-20 03:18:08 字數 1825 閱讀 7734

需求:在linux下遍歷目錄,輸出目錄中各檔名。

#include dir* opendir(const

char*dir_path);

struct dirent* readdir(dir*dirp);

int closedir(dir*dirp);

int lstat(const chat* filename,struct stat* st);

在這裡涉及到幾個結構體:dir,struct dirent,struct stat:

dir結構體是乙個內部結構,類似與file,用來儲存當前被讀取的目錄的資訊:

truct __dirstream 

;

typedef

struct __dirstream dir;

struct dirent,指向資料夾下的目錄內容:

struct

dirent

struct stat結構體儲存檔案資訊,通過stat(),fstat(),lstat()函式返回,這三個函式的區別是:stat()傳入檔案路徑得到stat,lstat()當傳入的是符號鏈檔案時,得到的是符號鏈檔案的資訊而不是符號鏈指向的檔案,fstat()傳入的是檔案描述符而不是檔案路徑。

struct

stat ;

以下是ls()函式的全部實現,通過opendir()得到dir*指標,readdir()函式獲得指向struct dirent結構的指標,再通過struct stat得到每乙個檔案的資訊。按字母順序先輸出目錄檔名,再輸出普通檔案。

int ls(std::string path,std::string&ret)

struct

stat st;

struct dirent *dir;

std::vector

string>file_name;

std::vector

string>dir_name;

while((dir = readdir(dirp)) !=null)

std::

string full_path = path + dir->d_name;

if(lstat(full_path.c_str(),&st) == -1

)

std::

string name = dir->d_name;

//replace the blank char in name with "%$".

while(name.find("

") != std::string

::npos)

if(s_isdir(st.st_mode)) //s_isdir()巨集判斷是否是目錄檔案

else

}closedir(dirp);

sort(file_name.begin(),file_name.end());

sort(dir_name.begin(),dir_name.end());

std::stringstream ss_ret;

int count = 0

;

for(auto i=dir_name.begin();i!=dir_name.end();i++)

else

}for(auto i=file_name.begin();i!=file_name.end();i++)

else

}ret =ss_ret.str();

return0;

}

C Linux下的itoa函式

上篇文章說到linux需要itoa函式,下面我就提供乙份跨平台的itoa函式。這個函式會返回字串的長度,在某些場合下會很有用。return the length of result string.support only 10 radix for easy use and better perfor...

C Linux下的itoa函式

上篇文章說到linux需要itoa函式,下面我就提供乙份跨平台的itoa函式。return the length of result string.support only 10 radix for easy use and better performance int my itoa int va...

C Linux 下簡單實現單詞統計

功能實現 從文字文件裡讀取英文單詞,可能含有中文字元,實現英文單詞,中文字元的數目統計 author 賀榮偉 creat time 16 01 2015 7 10 星期五 include include include include include const int str len 1010 c...