我正在执行系统调用以更改 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
的结果>chdircommand.argv[i]
可能会返回空指针,则同样如此)。
关于c++ - 调用 perror() 第一次成功,第二次返回 ILLEGAL SEEK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21336462/