Функция WriteFile с отладкой сборки (синхронизация)

Прежде всего, этот вопрос основан на моем последнем вопросе здесь: Буфер Консоли Чтения / Выход C ++

У меня есть скомпилированный исполняемый двоичный файл. Он имеет некоторые выходные данные, которые я хотел бы перенаправить в другую программу, которая обрабатывает строки. Я успешно нашел, куда выводится результат, и изменил его на STDOUT. Проблема в том, что, когда я использую это как:

./jampDed.exe | stdout.exe

тогда вывод не синхронизируется. Я получал контент после каждых 1000-2000 байт.

stdout.cpp

#include <iostream>

int main() {
std::string s;
while (std::getline(std::cin, s, '\n')) {
std::cout << s << std::endl;
}

return 0;
}

Я также создал рисунок о модификации сборки, где по умолчанию использовалась функция Kernel32.WriteFile.

ASM WriteFile

Итак, вопрос в том, как я могу сделать это синхронизировано? Как получить каждую строку, как только это происходит на выделенном сервере?

2

Решение

Где-то в исполняемом файле, где он устанавливает stdout бит опции для небуферизованного вывода. Просто установите (или очистите) этот бит. Затем каждый звонок для записи переводится без задержки. Это добавляет значительное время выполнения и усилия ввода-вывода для этой программы, но, вероятно, подходит для этого.

Программа, которая обрабатывает этот вывод (как входные данные), должна буферизовать полные строки, потому что программа вряд ли сама сделает полный вывод строки.

2

Другие решения

Почему бы тебе не попробовать:

std::cout << s << std::endl << std::flush;
^^^^^^^^^^
1

По вопросам рекламы [email protected]