我可以找到很多關于使用chdir()更改程式(例如命令外殼)中的目錄的檔案。我想知道是否有可能在不使用chdir(). 然而,我找不到任何檔案或代碼示例,其中一個人在不使用chdir()某些能力的情況下更改目錄。這可能嗎?
uj5u.com熱心網友回復:
在 Linux 中,chdir()是一個系統呼叫。這意味著它不是程式在自己的記憶體中所做的事情,而是請求作業系統內核代表程式做某事。
當然,它是可以更改目錄的兩個系統呼叫之一——另一個是fchdir(). 從理論上講,您可以使用另一個,盡管這是否是您的教授真正想要的,這對解釋非常開放。
至于為什么chdir()和fchdir()不能由應用程式重新實作但需要利用:當前作業目錄是內核代表程式維護的行程狀態之一;程式本身不能在不要求內核代表其操作的情況下訪問內核記憶體。
事物是系統呼叫,因為它們需要是系統呼叫——如果某些事情可以在行程內完成,就會以這種方式完成(跨越用戶空間和內核空間之間的邊界涉及背景關系切換懲罰;它并非沒有性能影響)。在這種情況下,讓內核準確記錄行程的作業目錄可以確保在加載新的可執行檔案時(使用execve())維護作業目錄,并有助于確保內核記錄的完整性(確保程式不能假裝它的當前作業目錄是它實際上無權訪問的目錄)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341864.html
下一篇:加載共享物件的兩個實體的安全方法
