windows8 - _dup,_dup2

时间:2012-04-02 07:52:42

标签: c++ visual-studio-2010 printf windows-8 dup

我使用win8 Consumer预览版8250执行程序,在win7上运行正常 该程序使用以下宏/函数:

#if defined(_WIN32)
#include <io.h>
#define streamDup(fd1) _dup(fd1)
#define streamDup2(fd1,fd2) _dup2(fd1,fd2)
#endif

static int acquireOutputStream()

{   int fd = streamDup(fileno(stdout));
    FILE* f = freopen("tmp","w",stdout); 
    return fd; }


static void releaseOutputStream(int fd)

{   fflush(stdout);
    streamDup2(fd,fileno(stdout));
    close(fd);
}

该程序执行以下操作:

for (int i = 0; i < 1000;++i) {
   int fd = acquireOutputStream();
   printf("redirect %d\n",i);
   releaseOutputStream(fd);
   printf("test %d\n",i);
}

每次运行时,都会打印到文件tmp随机数的正确“重定向j”打印: 在它之后,文件对于剩余的执行是空的。(f指针在acquireOutputStream中永远不是NULL)“test j”总是正确打印。 可能有什么问题?这是win 8的已知问题吗?

1 个答案:

答案 0 :(得分:0)

我的代码中有一个小问题。

static void releaseOutputStream(int fd)

{   fflush(stdout);
    streamDup2(fd,fileno(stdout));
    close(fd);
}

在此函数中,您不会在dup2调用之前关闭stdout(fclose(stdout))。

请在运行此代码时确切了解您所看到的内容的问题。这有助于诊断问题。