在 c++ 中将 FILE * stdout 重定向到字符串
Redirect FILE * stdout to string in c++
我想在C++中执行C的一些功能。该函数将 FILE * 作为参数:
void getInfo(FILE* buff, int secondArgument);
您可以将其打印到标准输出:
getInfo(stdout, 1);
// the function prints results into stdout, results for each value secondArgument
但是如何使这个函数在c ++中打印成流或字符串流,处理结果呢?我想将函数打印的内容捕获到字符串中,并对生成的字符串进行一些处理。
我尝试这样的事情:
for (i=0; i<1000; i++) {
getInfo(stdout, i);
// but dont want print to stdout. I want capture for each i, the ouput to some string
// or array of strings for each i.
}
在 Linux 中,最好的选择是匿名管道。
首先,创建一个管道:
int redirectPipe[2];
pipe(redirectPipe)
然后,使用 fdopen 打开通过 pipe(2) 返回给我们的文件描述符:
FILE* inHandle = fdopen(redirectPipe[0], "w");
FILE* outHandle = fdopen(redirectPipe[1], "r");
调用函数:
getInfo(inHandle, someValue);
然后,使用outHandle
阅读,就好像它是常规文件一样。
需要注意的一件事:管道具有固定的缓冲区大小,如果 getInfo 函数有可能填充缓冲区,您将遇到死锁。
若要防止死锁,可以从另一个线程调用getInfo
,也可以使用 fcntl
和 F_SETPIPE_SZ
增加管道缓冲区大小。或者更好的是,正如Ben Voigt在评论中提到的,创建一个临时文件。
注意:我特定于 *nix,因为 OP 提到他/她想要"Linux 中最好的一个"
相关文章:
- 如何将stdout重定向到stderr
- 编写时C++中的输入重定向问题
- 获取通过重定向传入的输入文件的名称?
- Windows C++重定向库
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 使用 dup2() 进行输入重定向
- 将 clangd stderr 重定向到文件而不是控制台
- 如何在C++中获取重定向网页的URL
- 将标准输出重定向到ostream
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 将 ffmpeg 控制台输出重定向到C++中的字符串或文件
- 使用输入重定向,如何在 C 中读取文件和获取字符串
- 在 linux 上使用命令行重定向(wiith <)将文件内容存储在字符串中?
- 将文件指针重定向到C/C++中的字符串
- 将打印到控制台的函数输出重定向到字符串
- 在 c++ 中将 FILE * stdout 重定向到字符串
- 将cin重定向到c++中的字符串
- 当重定向输入流到字符串时,c++程序核心转储
- 使用字符串流将 stderr 重定向到 stdout
- 在C++内执行 windows 命令并将输出重定向到本地字符串