首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >命令cd (cd -L)在C中的实现

命令cd (cd -L)在C中的实现
EN

Stack Overflow用户
提问于 2022-11-20 18:16:24
回答 1查看 69关注 0票数 1

我试图在C中编写命令cd,而不使用exec函数,我已经执行了cd -P版本,但是我似乎找不到一种方法来执行cd (cd -L),因为函数chdir解析符号链接,因此我的cd -L的行为类似于cd -P。

对于cd -P,我做了一个函数,它选择了我们想要到达的路径作为参数,并且在我的文件中有一个类似于$OLDPWD的变量old_pwd (我使用getenv("PWD")来初始化它),如果参数是空的,我只是在$HOME上使用chdir,如果参数是"-“,我在变量old_pwd上使用chdir,最后如果它是路径,我在该路径上使用chdir。如果您对如何更改当前目录而不解析任何符号链接有想法,我将非常感激!

EN

回答 1

Stack Overflow用户

发布于 2022-11-20 19:19:34

POSIX 路径分解通过一条路径逐步地工作,从头到尾解析符号链接。这是POSIX chdir()解释路径的方式,它与cd -P的行为是一致的。

cd -L需要不同的行为:表单..的步骤相对于给定路径中的其他文字步骤进行解释,而不管是否有任何步骤指定符号链接。这种行为不同于chdir(),所以您必须自己实现它,这在很大程度上是在将结果传递给chdir()之前解析和处理路径中的...的外观的问题。

上面链接的cd POSIX规范提供了一个详细的算法,说明cd -L应该如何执行所需的路径操作。因此,我删除了我在这个答案的早期版本中提出的算法,并用与POSIX官方规范相关的说明替换了有关它的说明。

备注:

  1. POSIX定义了一个模糊的环境变量CDPATH和与之关联的cd的一些目录搜索语义。详细信息在链接规范中。如果您要使用完整的POSIX语义,那么您将需要处理这个问题;否则,我怀疑是否有很多人会注意到该特性的缺失。
  2. -P的效果是将指定的路径按原样传递给chdir(),条件是任何目标路径实际上都是指定的,或者如果没有指定路径,则将$HOME的值传递给chdir()
  3. -L生效时,相对路径将根据$PWD的当前值进行解释。前导..路径步骤的处理考虑到了这一点。
  4. POSIX指定,如果..之前的领先路径(根据标准路径解析规则(包括符号链接遍历)解释)未指定目录,则..处理将导致cd失败。那是,
代码语言:javascript
复制
- `dir1/dir2/..` and `dir1/symlink-to-dir3/..` are both ok, and both are equivalent to `dir1`, but
代码语言:javascript
复制
- `dir1/regular-file/..`, `dir1/not-a-filename/..`, and similar are erroneous.
  1. 如果既没有给出-L也没有给出-L,那么-P行为是默认的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74510712

复制
相关文章

相似问题

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