我是学习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
答案 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() */
...
}