从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656

Calling cURL command from C++ returns unexpected error codes like 1792 and 6656

本文关键字:错误代码 1792 6656 意外 调用 C++ cURL 命令 返回      更新时间:2023-10-16

我有一个在嵌入式Linux上运行的C++应用程序,它构建并调用cURL命令以将文件复制到FTP服务器。

std::string cmd = "curl --connect-timeout 10 --ftp-create-dirs "
+ localPath + filename + " "
+ ftpPath + filename + " "
+ userAuth;
int retVal = system(cmd.c_str());

根据用于生成命令的变量,这将返回意外的错误代码。例如,当我尝试复制不存在的文件时,retVal是 6656 而不是预期的 26("找不到本地文件"(,当我关闭服务器时,retVal是 1792 而不是预期的 7("无法连接到服务器"(。

查看值,我很确定这与字节序有关,但我想了解根本原因。该设备具有ARMv7处理器,并使用小端格式。

这与字节序无关,但记录在system手册页中:

在最后两种情况下,返回值是"等待状态",可以是 使用 waitpid(2( 中描述的宏进行检查。 (即 WIFEXITED((, WEXITSTATUS((,等等(。

WEXITSTATUS

WEXITSTATUS(wstatus( 返回子项的退出状态。
这包括 状态参数的最低有效 8 位,即子项 在调用 exit(3( 或 _exit(2( 中指定或作为参数 用于 main(( 中的返回语句。
应使用此宏 仅当 WIFEXITED 返回 true 时。

如果您只想知道命令是否成功,则应使用:

if (WIFEXITED(retVal)) {
int retCode = WIFEXITSTATUS(retVal);
...
} else if (WIFSIGNALED(retVal) {
int signal = WTERMSIG(retVal);
...
} else {
/* process was stopped by a signal */
}