首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows8 - _dup,_dup2

windows8 - _dup,_dup2
EN

Stack Overflow用户
提问于 2012-04-02 15:52:42
回答 1查看 997关注 0票数 3

我使用win8用户预览版8250来执行程序,它在win7上工作正常。该程序使用以下宏/函数:

代码语言:javascript
复制
#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);
}

该程序执行以下操作:

代码语言:javascript
复制
for (int i = 0; i < 1000;++i) {
   int fd = acquireOutputStream();
   printf("redirect %d\n",i);
   releaseOutputStream(fd);
   printf("test %d\n",i);
}

每次我运行它时,它都会随机地将正确的"redirect j“打印到文件tmp中:在此之后,该文件对于其余的执行都是空的。(在acquireOutputStream中,F指针从不为空)”test j“总是正确打印的。会有什么问题呢?这是Win8上的一个已知问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-04-11 04:50:36

我在你的代码中发现了一个小问题。

代码语言:javascript
复制
static void releaseOutputStream(int fd)

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

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

请在问题中添加更多详细信息,说明您在运行此代码时到底看到了什么。这将有助于诊断问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9972669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档