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

问题描述 投票:0回答:1

我有一个在嵌入式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处理器,并使用小端格式。

c++ linux curl endianness
1个回答
0
投票

这与字节序无关,但在system联机帮助页中有记录:

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

WEXITSTATUS

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

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

if (WIFEXITED(retVal)) {
   int retCode = WIFEXITSTATUS(retVal);
   ...
} else if (WIFSIGNALED(retVal) {
   int signal = WTERMSIG(retVal);
   ...
} else {
   /* process was stopped by a signal */
}
© www.soinside.com 2019 - 2024. All rights reserved.