2012-04-02 4 views
3

I win8 Consumer Preview Build 8250 verwenden zur Ausführung eines Programms, das auf win7 Das Programm verwendet die folgenden Makros/Funktionen OK funktioniert: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); 
} 

Das Programm führt die folgenden Schritte aus:

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

Jedes Mal, wenn ich es laufen, gibt es tmp Zufallszahl der korrekten „redirect j“ Aufdrucke in Datei:. Nachdem die Datei ist leer für die restlichen Ausführungen (f Zeiger ist nie NULL in der acquireOutputStream)“ Test j "wird immer gedruckt korrekt. Was könnte ein Problem sein? Ist es ein bekanntes Problem bei Sieg 8?

+0

Ist Windows 8 öffentlich verfügbar? – trojanfoe

+1

bo .it ist Beta. – Yakov

+1

Können Sie klarstellen, was Sie erwarten und was Sie eigentlich bekommen? Ihre Frage ist ein wenig verwirrend. Sehen Sie "redirect 999" in der tmp-Datei oder "redirect 0", gar nichts oder etwas anderes? –

Antwort

0

Es gibt ein kleines Problem, das ich mit Ihrem Code sehe.

static void releaseOutputStream(int fd) 

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

In dieser Funktion sind Sie nicht in der Nähe stdout vor dem dup2 (fclose (stdout)).

Bitte fügen Sie weitere Details zu der Frage genau, was Sie sehen, wenn Sie diesen Code ausführen. Es würde helfen, das Problem zu diagnostizieren.

Verwandte Themen