簡體   English   中英

使用 chdir() 從終端更改目錄

[英]Using chdir() to change directory from Terminal

我正在使用chdir()將目錄更改為作為參數傳遞給此函數的值。

我知道當我使用gcc myCd.c./a.out ..運行我的 C 程序時,這會將目錄更改為 C 程序“內”的父目錄(即為 a.out 進程生成子進程,並且目錄的更改發生在該子進程中)。

我想要做的是,使用這個 C 程序在終端更改目錄。 我嘗試為此編寫一個 shell 腳本,然后獲取它並運行它,但我想使用 C 來實現這一點。

您嘗試做的事情無法完成。 當前工作目錄是每個進程的屬性。

如果您運行一個更改其cwd的程序,它不會影響任何其他進程,除了它可能在chdir()之后創建的任何子進程。

更改終端工作目錄的正確方法是使用 shell 代表您執行並保持在同一進程中的cd命令。 也就是說, cd是 shell 沒有fork()的幾個命令之一; 這使得cd命令按預期工作。

source一個 shell 文件使它在 shell 的進程中運行。 但是,如果您要在沒有source的情況下運行腳本,您會發現存在與 C 程序完全相同的問題:shell 分叉以創建一個運行腳本的進程,它運行然后退出,然后shell 繼續,但沒有改變它的 cwd。

這是在 C 中更改當前工作目錄的方法

這需要包含unistd.h頭文件

if( 0 != chdir( "pathToNewDirectory" ) )
{ // then chdir failed
    perror( "chdir failed" );
   // handle error
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM