终端命令和c ++ system(...)命令返回不同的结果

时间:2016-07-14 13:42:11

标签: c++ macos terminal command

我在OSX上。 这是我的C ++代码:

char * lCommandChar = lCommand;
std::cout << lCommandChar << std::endl;
int lSystRep = system(lCommandChar);

控制台显示:

echo -n "d2b16b956644ba30a73e9b116a4a4f4099add017" | /usr/bin/openssl dgst -verify /Users/me/opm.public -sha1 -signature /Users/me/Library/Caches/OrchPlay/temp_sig.bin
Verification Failure

如果我打开终端并复制我之前的日志:

$ echo -n "d2b16b956644ba30a73e9b116a4a4f4099add017" | /usr/bin/openssl dgst -verify /Users/me/opm.public -sha1 -signature /Users/me/Library/Caches/OrchPlay/temp_sig.bin
Verified OK

两个系统调用之间的差异在哪里?

编辑:我最后使用-d显示调试输出,我可以看到与阅读签名明显相关的差异: 我的代码返回:

BIO[6100000C01read(0,8192) - FILE pointer
BIO[6100000C01read return 44

终端返回:

BIO[7FB060C152read(0,8192) - FILE pointer
BIO[7FB060C152read return 40

但我仍然不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我最终更换了&#34; echo -n&#34;通过&#34; printf&#34;它起作用了。 printf似乎更可靠:https://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo

printf "d2b16b956644ba30a73e9b116a4a4f4099add017" | /usr/bin/openssl dgst -verify /Users/me/opm.public -sha1 -signature /Users/me/Library/Caches/OrchPlay/temp_sig.bin
Verified OK