c - 流和 llvm 错误

标签 c visual-studio stream llvm

以下是函数代码:

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/

相关文章:

c - 在 char 中传递参数可以使用 printf 正确打印,但不能使用 write

C:传递二维数组的一维会导致段错误

C 根据优化级别给出不同的输出(新示例)

visual-studio - 如何在 Visual Studio 和 CMake 中使用 clang-tidy?

C# GetManifestResourceStream 返回 null

Scala Stream 按需调用(懒惰)与按名称调用

c - 如何在 C 中编写我自己的 printf()?

visual-studio - 在 Visual Studio (Windows Azure StorageClient) 中添加引用时遇到困难

visual-studio-2010 - Visual Studio - 更好地指示构建状态

java - Spliterator 跳过部分文本