需求:在linux下遍歷目錄,輸出目錄中各檔名。
#include dir* opendir(constchar*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,指向資料夾下的目錄內容:
structdirent
struct stat結構體儲存檔案資訊,通過stat(),fstat(),lstat()函式返回,這三個函式的區別是:stat()傳入檔案路徑得到stat,lstat()當傳入的是符號鏈檔案時,得到的是符號鏈檔案的資訊而不是符號鏈指向的檔案,fstat()傳入的是檔案描述符而不是檔案路徑。
structstat ;
以下是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...