【发布时间】:2013-11-25 12:44:18
【问题描述】:
例如,程序a.out:
int main()
{
return 0x10;
}
程序b.out:
int main()
{
if(system("./a.out") == 0x10)
return 0;
else
return -1;
}
根据cppreference,system() 的返回值依赖于实现。因此,程序b.out的尝试显然是错误的。
在上述情况下,我怎样才能得到0x10 而不是未确定的值?
如果系统调用不是正确的工具,那么正确的方法是什么?
【问题讨论】:
-
它是实现定义的,这意味着您需要在 unix 或 unix like environment 上查找文档,例如,
man system会告诉您所需的详细信息。 -
system对此有点重。你真的想为此启动一个shell吗?如果调用代码都以 root 身份运行,或者在一个奇怪的环境中运行,那么这是一个安全禁忌。 -
@NicholasWilson 这是一个很好的观点。你能描述一下建议的方法吗?
-
@southp 只需 fork 和 exec。如果您真的需要使用 shell 语法(例如
system("./a.out | anotherapp 2>/dev/null"))并且无需费心在代码中设置所需的管道或重定向,则应该只使用system。
标签: c++