以下是函数代码:
int getStream()
{
int fd = _dup(fileno(stdout));
freopen("tmp","w",stdout);
return fd;
}
void freeStream(int fd)
{
_dup2(fd,fileno(stdout));
close(fd);
}
主程序代码:
printf(“start tets”);
int fd = getStream();
printf(“redirection”);
freeStream(fd);
这是使用llvm的大型程序的一部分
我在 freeStream(fd)
之后遇到的问题:LLVM 错误:输出流上的 IO 失败。
我知道问题出在 freeStream 的实现上。
你怎么认为?
谢谢
最佳答案
如果您想可靠地看到文本“redirection”
最终出现在临时文件中,则需要在将其关闭之前刷新stdout
中的缓冲区摆脱流中缓冲的任何挂起的写入。要实现此目的,请将此行添加到您的 freeStream
函数中:
void freeStream(int fd)
{
fflush(stdout); //<== add this line
_dup2(fd,fileno(stdout));
close(fd);
}
关于c - 流和 llvm 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7784966/