【发布时间】:2013-12-02 14:29:35
【问题描述】:
这是重现我的问题的示例代码:
#include <stdio.h>
int main()
{
char *f = "toto.txt";
char cmd[64];
sprintf(cmd, "nano %s", f);
system(cmd);
return 0;
}
如果我这样做:
./test
一切都很好,但如果我这样做:
echo "blah"|./test
Nano 失败:
received SIGHUP or SIGTERM
有没有更安全的方法来执行系统命令? 我已经尝试过重定向标准输入。
【问题讨论】:
-
AFAIK,管道是由 shell(例如 Bash)实现的,因此无法通过
system()获得。 -
@Claudio 但他并没有尝试这样做......程序的行为会根据 OP 如何从 shell 调用它而改变。
-
关于SIGHUP的错误信息来自nano。您可以尝试从 shell 运行 nano (echo "blah" | nano somefile"),它仍然会显示相同的消息。
-
@DanFego 确实如此。我想我不会使用标准输入,那么。没什么大不了的:)