[英]How to execvp ls *.txt in C
我有問題執行* .txt通配符,並且在C中讀取此線程 - exec()任何命令 - 表明由於“全局”問題很難。 有什么簡單的方法可以解決這個問題?
這是我正在嘗試做的事情:
char * array[] = {"ls", "*.txt", (char *) NULL };
execvp("ls", array);
你可以使用系統命令:
system("ls *.txt");
讓外殼為您做這些事情。
為了回答這個問題,您必須了解在終端(模擬器)中鍵入ls *.txt
時發生了什么。 鍵入ls *.txt
命令時, shell
對其進行解釋。 然后, shell
執行目錄列表,並根據*.txt
模式將目錄中的文件名匹配。 只有完成上述所有操作后, shell
才會將所有文件名作為參數進行准備,並生成一個新進程,將這些文件名作為argv
數組傳遞給execvp
調用。
為了自己組裝類似的東西,請查看以下問題:
fnmatch()
將文件名與類似Shell的通配符模式進行匹配。 vfork()
和exec(3)
函數系列之一來運行另一個程序。 另外,您可以按照@ manu-fatto的建議使用system()
函數。 但是該函數會做一些不同的事情-它實際上將運行將評估ls *.txt
語句的shell
程序,該程序隨后將執行與我上面描述的步驟類似的步驟。 它的效率可能較低,並且可能會引入安全漏洞(有關更多詳細信息,請參見手冊頁,“ 注意”部分說明了安全風險,建議在某些情況下不要使用上述功能)。
希望能幫助到你。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.