(C / Linux) Проблема с использованием оболочки bin / sh через netcat - printfs не появляются на экране до завершения программы - PullRequest
1 голос
/ 04 февраля 2012

Я получаю доступ к своему linux box через netcat, используя bin / sh в качестве оболочки.Я написал небольшую программу, приведенную ниже:

printf("Enter command to exec \n");

fgets(abc,128,stdin);

....

Что происходит, когда я запускаю программу в оболочке через netcat, команда ввода команды для отправки в систему не печатается дофактически вышли из программы.

Это должно быть первое, что появляется на экране после ./program, и странно, что он принимает мой ввод при запуске, как будто пропускает команду printf.Мои входные данные отправляются в систему нормально (и печатает выходные данные), но в противном случае на экране ничего не отображается, без печати, которые я кодировал.

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

Большое спасибо

1 Ответ

2 голосов
/ 04 февраля 2012

На терминале stdout обычно буферизуется строкой, вам нужно либо fflush(stdout), либо распечатать новую строку '\n', чтобы увидеть, как печатаются ваши символы.

На неинтерактивных устройствах потоки часто бывают с полной буферизацией, и вам нужно сбросить stdout для печати ваших символов:

printf("Enter command to send to system \n");
fflush(stdout);
...