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

时间:2014-01-24 15:33:18

标签: c++

我正在进行系统调用以更改C ++程序中的当前目录,并且由于某种原因,第一次调用会在PERROR IN ELSE中返回成功,而第二次调用会在PERROR IN ELSE中返回非法搜索(使用相同的命令和两个函数调用都将直接指向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;

  }
}

1 个答案:

答案 0 :(得分:4)

如果没有发生错误,请不要致电perror。它会给你毫无意义的输出。

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

在特定情况下,除非perror返回chdir,否则请勿致电-1

在Linux上,chdir如果你给它一个NULL指针会引发EFAULT错误,但是在POSIX(chdir)中没有强制要求,所以最好检查一下调用getenv之前chdir的结果(如果可能会返回空指针,则command.argv[i]也是如此)。