我有一个编译 test.cpp 的命令,应该将输出存储在输出文件中。以下是我生成的cmd的示例:
g ++ tmp / test.cpp -o tmp / test&> TMP / compile.out
当我使用 system()时,它不起作用。即使它创建输出文件,它仍然会将所有内容打印到主控制台窗口。当我在终端中执行它时,它工作得很好。
我也尝试过使用 popen()和 fgets()(只是从here复制代码),但同样的事情发生了。我可能只是分叉我的进程并使用 freopen 或其他东西,但我有套接字和多个线程在后台运行。我猜他们也会重复,这不好。
任何想法可能会失败?
答案 0 :(得分:3)
根据system
的man-page,它调用sh
这是标准的bourne shell(不是bash,Bourne Again SHell)。并且bourne shell不理解&>
。所以你可能需要使用旧样式:
g++ tmp/test.cpp -o tmp/test >tmp/compile.out 2>&1
答案 1 :(得分:0)
我在popen()
上尝试了以下变体,它在Mac OS X 10.7.2下运行,gcc 4.2.1:
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
int main (int argc, char **argv)
{
FILE *fpipe;
char *cmd = "foo &> bar";
if ( !(fpipe = (FILE*)popen(cmd,"r")) ) {
perror("Problems with pipe");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
编译:
gcc -Wall test.c -o test
二进制test
创建一个名为bar
的文件,其中包含以下输出:
sh: foo: command not found
如果我在shell中键入foo &> bar
,我会看到的是什么。