2009-10-21 7 views
1

Comment redirigez-vous la sortie de printf vers, par exemple, un flux ou quelque chose? J'ai une application gui qui lie avec une bibliothèque de console. La bibliothèque fait des appels répétés à printf. J'ai besoin d'un moyen d'intercepter ceux-ci et de les faire traiter par une fonction. En outre, la création d'une console n'est pas une option. Im en utilisant Windows, BTW.Redirection de printf?

Modifier - Aussi j'espérais ne pas rediriger vers un fichier.

Répondre

1

Si vous voulez éviter d'utiliser un fichier, vous pouvez utiliser un tube nommé, rediriger la sortie stdout et lire dans un autre thread ou processus.

Certains pseudo-code avec vérification d'erreur omis:

HANDLE hPipe = CreateNamedPipe("\\.\pipe\SomePipeName", ...); 
int pipeFileDescriptor = _open_osfhandle(hPipe, someFlags); 
_dup2(pipeFileDescriptor, _fileno(stdout)); 

Maintenant que printf écrit à stdout devrait aller à la conduite.

Dans un autre thread ou processus, vous pouvez lire à partir du tuyau dans un tampon:

HANDLE hPipeClient = CreateFile("\\.\pipe\SomePipeName", ...); 
ReadFile(hPipeClient, ...); 

Je pense que cela va fonctionner, mais je n'ai pas encore testé.

2

freopen (nom de fichier, mode, stdout);