在執行rm *的程序中,通配符*是如何被解釋的呢?下面是我的分析思路:
首先,我在rm.c的main()中添加列印,發現在執行/bin/rm前,通配符*就已經被解釋為當前目錄下的所有檔案了;
其次,我以為通配符會在linux的shell中解釋,但是在shell.c中main()也添加列印,發現在執行rm *時并不會走進shell;
然后,我又利用strace去看rm *的程序,發現是直接呼叫execve()函式,并沒有看到如何將*轉換為檔案名;
我不信邪,通過strace來起監控bash的行程,然后呼叫rm *,發現一些問題:


通過上面的圖,我理解是openat()去讀當前路徑下的檔案并通過getdents輸出到buf中,但shell是如何調的呢?是通過
readdir()嗎?有大神能具體講講嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/279106.html
標籤:應用程序開發區
下一篇:shell腳本中第一行!#的規定
