首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >chdir()到主目录

chdir()到主目录
EN

Stack Overflow用户
提问于 2012-02-29 11:33:16
回答 2查看 32K关注 0票数 18

我使用chdir() C函数来允许用户更改目录。

但是,该函数不能识别“~”。我需要做任何显式转换吗,这样chdir就不会识别~的意思了?因为我的坏了。还是我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-29 11:34:59

波浪号扩展由shell处理,而不是由系统调用处理。您可以使用getenv()读取环境变量HOME,然后将其用作chdir()的参数。

有一些系统调用来获取这些信息,这些调用在单个系统上可能更可靠,但它们不是完全可移植的。例如,看看getpwuid().

票数 24
EN

Stack Overflow用户

发布于 2012-02-29 11:54:33

请注意,POSIX指定了代字号扩展的语义:

2.6.1 Tilde扩展

“代字号前缀”由单词开头的未加引号的<tilde>字符组成,后面是单词中第一个未加引号的<slash>之前的所有字符,如果没有<slash>,则由单词中的所有字符组成。在赋值(参见XBD变量赋值)中,可以使用多个代字号前缀:在单词的开头(即,在赋值的<equals-sign>之后),在任何未加引号的<colon>之后,或者同时使用这两个前缀。赋值中的波浪号前缀由第一个未加引号的<colon><slash>终止。如果代字号前缀中没有任何字符被引用,则<tilde>后面的代字号前缀中的字符将被视为用户数据库中可能的登录名。可移植登录名不能包含XBD Other environment Variables中LOGNAME环境变量说明中给出的集合以外的字符。如果登录名为null (即,代字号前缀仅包含代字号),则代字号前缀将替换为变量HOME的值。如果未设置HOME,则不指定结果。否则,代字号前缀应替换为初始工作目录的路径名,该路径名与使用POSIX.1-2008的系统接口卷中定义的getpwnam()函数获得的登录名相关联。如果系统无法识别登录名,则结果未定义。

特别要注意,如果我的用户名是me,则cd ~cd ~me的结果可能不同!具体来说,可以将HOME环境变量设置为与getpwnam()返回的值不同的值。我已经使用这种技术(超过25年)将我的HOME设置在我想要的地方,少数不能识别cd ~cd ~me之间的区别的程序是我生活中的一些(许多)祸害。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9493234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档