簡體   English   中英

chdir()到主目錄

[英]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()函數獲得的登錄名關聯的初始工作目錄的路徑名。 如果系統無法識別登錄名,則結果未定義。

請特別注意,如果我的用戶名是mecd ~cd ~me可能不一樣! 具體來說, HOME環境變量可以設置為與getpwnam()返回的值不同的值。 我一直在使用這種技術(大大超過25歲)來設置我的HOME ,我想它,不承認之間的區別的幾個程序cd ~cd ~me是一些巴內斯(多數人)我的生活。

暫無
暫無

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

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