【问题标题】:Passing a variable to chdir() in C (Linux) [duplicate]在C(Linux)中将变量传递给chdir()[重复]
【发布时间】:2011-11-10 00:45:54
【问题描述】:

我的 C 程序中的 chdir() 出现问题 - 仅在 Linux 上运行时(在 Mac 上运行良好)。我已经剥离了我的代码。

这样的东西很好用:

chdir("/Documents");

但是当我尝试将它作为变量传递时,它不想工作。

char *home_directory;
home_directory = malloc(80);
chdir(home_directory);

主目录是从我代码中其他地方的文件中读取的,如果需要,我可以发布我是如何做到的。

谢谢。

【问题讨论】:

  • “它不想工作”是您向同行准确表达技术理念的最佳证明吗?
  • (1) 贴出填码home_directory。 (2) 在 Linux 上实际失败的原因是什么?
  • 我希望您读取malloc 和chdir 之间的主目录?您确定路径 79 个字符就足够了吗?
  • 您应该检查chdir() 返回的内容以及之后errno 的设置(无论如何,您的程序都应该以这种方式处理错误)。 perror() 将显示一条人类可读的错误消息。我假设您在调用 chdir() 之前已经检查了值 home_directory。
  • 您作为参数传递的变量的内容肯定是错误的。请在上面代码中的 chdir 之前尝试strcpy(home_directory, "/Documents");。

标签: c linux chdir


【解决方案1】:

由于您正在从文件中读取home_directory,您是否忘记在将其用作chdir 的参数之前删除尾随换行符和任何其他虚假字符?

【讨论】:

  • 我知道问题就这么简单。非常感谢您的帮助,谢谢!
  • @user1038788:如果这是正确答案,为什么不投票并将其标记为已接受?
  • “投票需要 15 声望”。我现在已将其标记为已接受。
【解决方案2】:

尝试做一些错误检查,像这样;

char *home_directory;
home_directory = malloc(80);
/* ...fill the home directory... */
if (chdir(home_directory) == -1)
   perror("chdir");

..然后用man chdir哟可以查一下错误码的意思。

【讨论】:

  • errno 几乎肯定会最终成为ENOENT。 strace 建议可能会更有用(除了提供 errno 而无需重建 ;-)
  • 当然,但是不检查你的错误代码然后抱怨它不起作用的双重坏习惯是非常糟糕的......你几乎不能指望人们每次都带着一个 strace系统调用失败...
【解决方案3】:

由于chdir 是Linux 上的系统调用,您可以简单地使用strace 程序来查看您的程序到底做了什么。但这并不能让您免于在代码中预先处理错误;明显地。它只是帮助你遵循你的程序所采取的行动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2013-11-02
    • 2016-02-23
    • 2013-01-28
    相关资源
    最近更新 更多