readdir 和 glob 是 linux 系統(tǒng)下用于處理文件和目錄的兩個不同功能的函數(shù),它們在使用方式和適用場景上各有特點(diǎn)。
readdir
readdir 是一個符合 POSIX 標(biāo)準(zhǔn)的庫函數(shù),主要用來讀取指定目錄中的內(nèi)容。它通常配合 opendir 和 closedir 函數(shù)一起使用,用于逐條獲取目錄中的條目信息。
函數(shù)聲明:
#include <dirent.h> <p>struct dirent <em>readdir(DIR </em>dirp);
參數(shù)說明:
- dirp 是通過 opendir 打開的一個目錄流指針。
返回結(jié)果:
- 若調(diào)用成功,將返回一個指向 dirent 結(jié)構(gòu)體的指針,其中包含當(dāng)前目錄項(xiàng)的信息。
- 如果讀取失敗或已到達(dá)目錄末尾,則返回 NULL。
相關(guān)說明:
- dirent 結(jié)構(gòu)體中的 d_name 成員保存了目錄項(xiàng)對應(yīng)的名稱。
- readdir 不會對讀取的目錄項(xiàng)進(jìn)行排序,其順序取決于文件系統(tǒng)的實(shí)現(xiàn)方式。
glob
glob 是一個用于文件名模式匹配的函數(shù),能夠根據(jù)給定的通配符模式(例如 * 或 ?)查找并返回所有匹配的文件路徑列表。
函數(shù)定義:
#include <glob.h></p><p>int glob(const char <em>pattern, int flags, int (</em>errfunc)(const char <em>, int), glob_t </em>pglob);
參數(shù)說明:
- pattern 表示要匹配的文件名模式。
- flags 用于控制匹配過程的行為標(biāo)志。
- errfunc 是一個可選的錯誤回調(diào)函數(shù)。
- pglob 是一個 glob_t 類型的結(jié)構(gòu)體指針,用于接收匹配結(jié)果。
返回值:
- 匹配成功時(shí)返回 0。
- 出現(xiàn)錯誤則返回非零值。
注意事項(xiàng):
- glob 函數(shù)會自動展開通配符,生成所有匹配的文件路徑。
- 匹配結(jié)果是以字符串?dāng)?shù)組形式存儲的,且內(nèi)存是動態(tài)分配的,使用完后需通過 globfree 函數(shù)釋放。
對比分析
- 功能區(qū)別:readdir 主要用于遍歷目錄內(nèi)的各個條目;而 glob 更適用于根據(jù)特定模式查找符合條件的文件。
- 返回內(nèi)容差異:readdir 返回的是一個 dirent 類型的結(jié)構(gòu)指針,記錄單個條目的詳細(xì)信息;glob 則返回一組字符串,代表所有匹配到的文件名。
- 應(yīng)用場景不同:當(dāng)你需要逐項(xiàng)訪問目錄中的內(nèi)容時(shí),應(yīng)選擇 readdir;若希望依據(jù)通配規(guī)則批量查找文件,則更適合使用 glob。
在實(shí)際開發(fā)過程中,可以根據(jù)任務(wù)需求靈活選用合適的函數(shù)。有時(shí)為了完成更復(fù)雜的文件操作,也可能需要同時(shí)結(jié)合這兩個函數(shù)來實(shí)現(xiàn)目標(biāo)。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END