c++ - 调用 perror() 第一次成功,第二次返回 ILLEGAL SEEK?

标签 c++

我正在执行系统调用以更改 C++ 程序中的当前目录,由于某种原因,第一次调用在 ELSE 中的 PERROR 上返回成功,而第二个调用在 ELSE 中的 PERROR 上返回非法搜索(使用相同的命令和对函数的调用都将指向 else 子句)。知道为什么吗?谢谢。感谢你们的帮助!

void changedir(cmd_t& command, int numArg)
{
  char buffer[MAXCHAR];
  if (numArg == 1){
    chdir(getenv("HOME"));
    perror("chdir");
    getcwd(buffer, MAXCHAR);
    cout << buffer << endl;

  } else {
    chdir(command.argv[1]);
    perror("chdir");
    getcwd(buffer, MAXCHAR);
    cout << buffer << endl;

  }
}

最佳答案

如果没有发生错误,不要调用 perror。它会给你无意义的输出。

一般来说,errno 的值在系统/库调用后是未定义的,除非那个调用文档将它设置为一个特定的值。这通常仅在调用失败且函数通过其返回值发出信号时发生。

在您的特定情况下,除非 chdir 返回 -1,否则不要调用 perror

在 Linux 上,chdir如果给它一个 NULL 指针,将引发 EFAULT 错误,但这在 POSIX (chdir) 中不是强制要求的,因此最好在调用 之前检查 getenv 的结果>chdir(如果您的 command.argv[i] 可能会返回空指针,则同样如此)。

关于c++ - 调用 perror() 第一次成功,第二次返回 ILLEGAL SEEK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336462/

相关文章:

c++ - [] 不允许重载 C++ 函数数组

c++ - std::bind 函数中没有可行的重载 '='

c++ - 模板类静态成员变量的隐式初始化

c++ - 声明结构时的 vector 分配

c++ - std::vector 调整大小方法背后的设计原理是什么?

c++ - 如何在Qt中解析一个未知的xml并获取其中的所有属性?

c++ - 使用 Xlib 更改绘图颜色

c++ - 段错误多线程 C++ 11

c++ - 如何在节点类中实现节点引用

c++ - 为什么在抛出意外异常时此程序没有中止?