这个问题很简单:如何捕获并重定向由子程序产生的stderr/stdout输出到一个文件,该子程序在使用Apache Portable Runtime的
最终任务是在单独的进程中运行带有一些参数的外部命令(最好是但不强制要求),并将其输出重定向到一个文件。
到目前为止,我已经得到了以下代码(为了清晰起见删除了检查)。
使用这段代码可以抑制子进程的输出(至少我在控制台上看不到它),但它没有重定向到文件。使用
APR似乎没有很多“食谱”,所以我无法在谷歌上找到它。
有任何提示或建议吗?非APR解决方案也可以,只要它们像我发布的代码一样简单明了。
附注:运行在Debian 6(Linux
apr_proc_create
创建的新进程中运行。最终任务是在单独的进程中运行带有一些参数的外部命令(最好是但不强制要求),并将其输出重定向到一个文件。
到目前为止,我已经得到了以下代码(为了清晰起见删除了检查)。
apr_procattr_t *attr;
apr_proc_t newproc;
const char *progname;
const char *args[100];
// progname and args are populated with data here
apr_procattr_create(&attr, p);
apr_procattr_io_set(attr, APR_CHILD_BLOCK, APR_CHILD_BLOCK, APR_CHILD_BLOCK);
apr_procattr_cmdtype_set(attr, APR_PROGRAM_PATH);
apr_proc_create(&newproc, progname, args, NULL, attr, p);
使用这段代码可以抑制子进程的输出(至少我在控制台上看不到它),但它没有重定向到文件。使用
APR_NO_PIPE
代替APR_CHILD_BLOCK
会导致将子进程的输出刷新到父进程的stdout/stderr。APR似乎没有很多“食谱”,所以我无法在谷歌上找到它。
有任何提示或建议吗?非APR解决方案也可以,只要它们像我发布的代码一样简单明了。
附注:运行在Debian 6(Linux
2.6.32-5-686
),gcc 4.4.5
,但我认为这与问题无关。 :)