2012-04-02 3 views
3

내가이 프로그램은 다음과 같은 매크로/함수를 사용 WIN7 에서 확인을 작동하는 프로그램을 실행하기위한 win8 소비자 미리보기 빌드 8250을 사용windows8 - _dup, _dup2

#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); 
} 

나는 그것을 실행할 때마다, 그것은 올바른 "재 J"장 복사의 tmp를 임의의 숫자를 파일로 인쇄합니다. 그 후 이 파일이 남아있는 실행을 위해 비어 (F 포인터가 acquireOutputStream에 NULL 결코) " 테스트 j "는 항상 인쇄됩니다. 바르게. 무엇이 문제 일 수 있습니까? 승리 8에서 알려진 문제입니까?

+0

Windows 8은 공개적으로 제공됩니까? – trojanfoe

+1

보 .it은 베타입니다. – Yakov

+1

실제로 무엇을 기대하고 있는지 예상 할 수 있습니까? 귀하의 질문은 약간 혼란 스럽습니다. tmp 파일에서 "redirect 999"를 보시나요? 아니면 "redirect 0"입니까, 전혀 아님입니까, 아니면 다른 것입니까? –

답변

0

코드에있는 작은 문제가 하나 있습니다.

static void releaseOutputStream(int fd) 

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

이 함수에서는 dup2 호출 (fclose (stdout)) 전에 stdout을 닫지 않습니다.

이 코드를 실행할 때 표시되는 내용에 대한 자세한 내용을 질문에 추가하십시오. 문제 진단에 도움이됩니다.

관련 문제