【发布时间】:2012-06-20 13:08:19
【问题描述】:
当从 cgi 调用 system() 时,它总是返回 -1(表示错误)。 errno 设置为 10,ECHILD。
test.cgi 包含:
cout << "/bin/true " << system("/bin/true") << endl;
cout << "/bin/false " << system("/bin/false") << endl;
cout << "/bin/touch /tmp/foo" << system("/bin/touch /tmp/foo") << endl;
从命令行调用,因为 ./test.cgi 返回:
/bin/true 0
/bin/false 256
/bin/touch /tmp/foo 0
但将其作为来自网络浏览器的链接调用会返回(在预期的格式错误的标头错误消息之后):
/bin/true -1
/bin/false -1
/bin/touch /tmp/foo -1
我已验证命令在两种情况下都执行(文件 /tmp/foo 已创建),但通过 httpd(mongoose、ARM9、Linux)调用它们会返回 -1。
任何提示,如何解决?
【问题讨论】:
-
C 中没有
cout << whatever! -
@eckes:好的,关键字已相应调整。我怀疑编译器的选择:gcc 或 g++ 在这里有问题,但无论如何......
-
猜是权限问题:运行web服务器的用户是否有权限执行
/bin/true和/bin/false? -
/bin/sh和/bin/true是否存在于 Web 服务器的命名空间中?如果是chrooted,也许不是。您是如何“验证命令已执行”的? -
@Rob:确实如此。我正在启动一个不同的命令,它以相同的方式发出小扬声器的哔哔声,我可以听到它哔哔声。 (当从 httpd 调用时,它返回相同的 -1 而不是实际的返回码。)
标签: c++ linux shell cgi system