【问题标题】:Is using chdir() the only way to change the working directory in Linux C?使用 chdir() 是在 Linux C 中更改工作目录的唯一方法吗?
【发布时间】:2017-04-26 14:14:49
【问题描述】:

我被分配了一个任务,我必须使用 ncurses 和 C 构建一个自定义终端,并且需要执行几个命令。

其中一个命令恰好是 chdir,它旨在更改工作目录,但是在更改工作目录时,除了已经构建的之外,我在 C 中找不到更相关的内容在 C 中的 chdir() 函数中。

要求我使用可用的 chdir() 函数,而是自己构建。我什至不确定这是否可能,或者如果这是一个错误,目录处理不应该依赖于实现吗?

感谢您的时间和帮助。

【问题讨论】:

  • 这是不可能的,这是一个错误。您必须使用系统调用 chdir(2) 来更改密码。谁说你必须建立自己的,他们都不知道他们在说什么。
  • 我想是的,谢谢你的确认 :)
  • 进程的当前工作目录由内核控制。要真正“构建自己的”,您必须修改内核。正如@AhmedMasud 所说,无论谁说你必须自己建造,他们都不知道他们在说什么。不过,需要注意的一点是,您可能不应该更改工作目录,因为它是一个进程范围的事情,可能会影响程序的其他部分。总的来说,chdir() 是要非常小心使用的东西。
  • 如果这行得通:stackoverflow.com/questions/2375003/… 你理论上可以使用它——我认为它会产生一个有趣的反应。如前所述,真正的答案是肯定的——这是唯一的方法。
  • @Stefan,您的分配看起来已经很奇怪了,因为工作目录通常与终端没有直接关系,而是与 其中运行的内容 直接相关,例如一个外壳,它通常对这些东西有自己的规定。我继续怀疑这里存在误解,可能与不精确的用词有关。如果讲师坚持让你实现chdir,那么我建议你寻求他们的帮助或建议如何实现它。也请随时将他们指向此讨论。

标签: c linux directory


【解决方案1】:

chdir() 是更改进程当前工作目录的唯一方法。如果您不允许使用此功能,您可以通过跟踪应用程序中的当前目录来部分模拟 chdir(),例如通过使用变量。请注意,这样的模拟是不完整的,特别是子进程的工作目录将是您的程序启动的地方,而不是您的变量中的一个。

【讨论】:

  • 可以打开目录获取文件描述符,使用fchdir()。这符合规则的文字,但不符合精神。
猜你喜欢
  • 2011-12-13
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多