如何将stdout重定向到ANSI C中的字符串

时间:2013-10-10 06:45:35

标签: c string redirect stdout

我是学习C语言的初学者: - )

我已经在stackoverflow中搜索了如何解决这个问题,但我无法理解。 : - (

在发布此帖子之前,我总是将stdout重定向到文件,然后使用fread

将其读取为字符串
system ("print.exe > tempfile.tmp");
FILE *fp = fopen ( tempfile.tmp , "rb" );
char Str[Buf_Size];
fread (Str,sizeof(char),Buf_Size,fp);

如果这样做,它会在文件I / O中浪费大量时间。

如何在不重定向到临时文件的情况下将stdout重定向到C语言中的字符串?

有可能吗?感谢。

环境: Windows and GCC

2 个答案:

答案 0 :(得分:1)

在Unix中你会:

  • 创建pipe
  • fork子流程
  • 父母:
    • 关闭管道的书写端
    • 从管道开始阅读
  • 孩子:
    • 关闭管道的读取端
    • 关闭stdout
    • dup2是fd 1
    • 的写端管道
    • exec是新计划

答案 1 :(得分:1)

stdout可以通过popen例程重定向:

#include <stdio.h>
...


FILE *fp;
int status;
char path[PATH_MAX];


fp = popen("ls *", "r");
if (fp == NULL)
    /* Handle error */;


while (fgets(path, PATH_MAX, fp) != NULL)
    printf("%s", path);


status = pclose(fp);
if (status == -1) {
    /* Error reported by pclose() */
    ...
} else {
    /* Use macros described under wait() to inspect `status' in order
   to determine success/failure of command executed by popen() */
   ...
}