Ma question concerne "Turn off buffering in pipe", mais concerne Windows plutôt que Unix. J'écris un make clone et pour arrêter les processus parallèles de thrashing la sortie de la console des autres j'ai redirigé la sortie vers les tuyaux (comme décrit dans here) sur lequel je peux faire le filtrage que je veux. Malheureusement, les processus de longue durée mettent maintenant leur production en tampon plutôt que de l'envoyer en temps réel comme ils le feraient sur une console. De la lecture des sources MSVCRT, il semble que la cause première soit que GetFileType() soit utilisé pour vérifier si les handles d'E/S standard sont attachés à une console, qui définit ensuite un indicateur interne et finit par désactiver la mise en mémoire tampon.Mise en mémoire tampon indésirable lors du filtrage de la sortie de la console dans Win32
Apparemment, un tableau séparé de poignées et d'indicateurs de fichiers héritables peut également être transmis via le membre lpReserved2 non documenté de la structure STARTUPINFO lors de la création du processus. A propos de la seule solution de travail que j'ai compris est d'utiliser cette liste et de mentir sur le type de périphérique lors de la définition des indicateurs pour stdout/stderr.
Maintenant alors ... Y a-t-il une solution à ce problème? sane?
Ceci est fait non seulement pour améliorer les performances, mais aussi pour se conformer à la (aux) norme (s). C99, §7.19.3/7: "... l'entrée standard et les flux de sortie standard sont entièrement mis en mémoire tampon si et seulement si le flux peut être déterminé comme ne faisant pas référence à un dispositif interactif." –