Я пытаюсь понять следующие симптомы: < /p>
[*] У меня есть программа C ++, которая использует Windows
Код: Выделить всё
ReadFile< /code>
для чтения (и отбросить) все stdin. < /p>
< /li>
readfile < /code> Вызов Указывает размер чтения 0x10000 (65536) Bytes.
(проблема возникает с этим размером или чем -то большим.) через Cygwin ssh localhost
[*] Я использую cygwin dd для подачи 200 КБ данных (все нулы).
[*] wans. Ctrl+C убивает dd < /code> и ssh < /code>, но оставляет программу
запуска, поэтому я должен убить ее с помощью проводника процесса или менеджера задач. < /P>
< /li>
< /ul>
, но: < /p>
, если я определен 0x. работает.
[*] Если я запускаю программу напрямую (без ssh ), все работает.
Если я вместо этого использую dd как потребитель, все работает. Таким образом, я могу надежно обработать
, какая бы ни была проблема.
Код: Выделить всё
// readfile.cc
// Just read (and discard) all of stdin using ReadFile.
#include // std::atoi
#include // std::{cout, endl}
#include // std::vector
#include // ReadFile, etc.
#define DIAG(stuff) std::cout
~/tmp$ dd if=/dev/zero bs=200k count=1 status=none | ssh localhost tmp/readfile 65536
[hang]
Код: Выделить всё
maxSize: 65536
calling ReadFile with size 65536
ReadFile: bytesRead=65536
calling ReadFile with size 65536
Exit 1 [This is printed by my shell.]
< /code>
Для ясности поток данных между программами: < /p>
dd (Cygwin) -> ssh (Cygwin) -> sshd (Cygwin) -> readfile.exe (Native Windows)
< /code>
На основе вывода выше, кажется, что подвес происходит в вызове
second readfile < /code>, хотя этот вывод только появляется после < /em> I Убиваю
процесс. Одна возможность состоит в том, что SSH < /code>-это буферизацию, но если это так,
я не вижу опции
, чтобы отключить
that.
run, показывающий, что это нормально с немного меньшим размером: < /p>
< /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/79729658/why-does-readfile-on-stdin-with-size-at-least-64kib-hang-under-ssh[/url]