我有一个在嵌入式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()中的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 */
}