2012-11-11 48 views
0

對於我的學校項目,我試圖實現擴展名爲* .jpg,* .c的文件擴展名。爲此,我必須使用像readdir(2)和getdents(3)這樣的函數來讀取當前目錄中的所有文件,然後使用strstr(3)來匹配它們,然後將它們添加到傳遞給exec(2)的參數列表中。我不假設使用glob(3)。我應該如何實現這一點?支持文件擴展擴展

+0

有沒有理由不想使用glob(3)'?其操作系統類爲 – dmckee

+0

,所以效率是必須的,我們不假設使用glob(3)。 – user1535672

+0

好理由。在文中提到你不應該使用它是有幫助的,以免你得到一堆答案。 – dmckee

回答

0

POSIX提供了支持globbing的函數;標準C不會,而微軟則完全不同。

標題<fnmatch.h>和函數fnmatch()可能是答案的一部分;這允許您使用opendir(),readdir()closedir()函數來掃描目錄並將文件名與您的glob模式進行匹配。

如果不是針對問題中的禁止,您可能會發現<glob.h>標題和glob()函數更合適。

你可以看看<wordexp.h>標題和wordexp()。這比​​3210做的還要多,但如果它沒有被禁止,會爲你節省很多的努力。

通常情況下,​​3210是最有可能做你需要的。但是,因爲這被排除了,也許你可以使用​​,它希望你從文件名中得到...實際上,它並不關心你從哪裏得到名字;它只是驗證您提供的名稱是否與您指定的文件名稱模式相匹配。

如果你不打算使用其中的任何一個,那麼你將不得不實現足夠的正則表達式來匹配你期望識別的shell地球,並且仍然使用readdir()等來檢查可用的名稱。