![](/img/trans.png)
[英]chdir(getenv(“HOME”) prompts error “No such file or directory”
[英]chdir() to home directory
我正在使用chdir()
C函數來允許用戶更改目錄。
但是,該功能無法識別'〜'。 我是否需要進行任何顯式轉換,因此chdir
無法識別是什么意思? 因為我不工作。 或者我做錯了什么?
Tilde擴展由shell處理,而不是由系統調用處理。 您可以使用getenv()
讀取環境變量HOME
,然后將其用作chdir()
的參數。
系統調用可以獲得在單個系統上可能更可靠的信息,但它們不是完全可移植的。 例如,看看getpwuid()。
請注意, POSIX指定了波浪擴展的語義:
2.6.1 Tilde擴展
“tilde-prefix”由一個單詞開頭的未加引號的
<tilde>
字符組成,后跟單詞中第一個未加引號的<slash>
之前的所有字符,如果沒有則單詞中的所有字符<slash>
。 在賦值(參見XBD變量賦值)中,可以使用多個波浪號前綴:在單詞的開頭(即,在賦值的<equals-sign>
之后),在任何未引用的<colon>
,或兩者。 賦值中的波浪號前綴由第一個未引用的<colon>
或<slash>
終止。 如果沒有引用tilde-prefix中的字符,則<tilde>
后面的tilde-prefix中的字符將被視為來自用戶數據庫的可能登錄名。 可移植登錄名不能包含XBD其他環境變量中LOGNAME環境變量描述中給出的集合之外的字符。 如果登錄名為null(即,tilde-prefix僅包含波浪號),則波形前綴將替換為變量HOME
的值。 如果未設置HOME
,則結果未指定。 否則,tilde-prefix應替換為與使用POSIX.1-2008的系統接口卷中定義的getpwnam()
函數獲得的登錄名關聯的初始工作目錄的路徑名。 如果系統無法識別登錄名,則結果未定義。
請特別注意,如果我的用戶名是me
, cd ~
和cd ~me
可能不一樣! 具體來說, HOME
環境變量可以設置為與getpwnam()
返回的值不同的值。 我一直在使用這種技術(大大超過25歲)來設置我的HOME
,我想它,不承認之間的區別的幾個程序cd ~
和cd ~me
是一些巴內斯(多數人)我的生活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.