(C / Linux)通过netcat使用bin / sh shell的问题 - 在程序结束之前,printfs不会出现在屏幕上

时间:2012-02-03 22:08:09

标签: c linux netcat

我使用bin / sh作为我的shell通过netcat访问我的linux盒子。我编写了一个小程序,摘录如下:

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

fgets(abc,128,stdin);

....

发生的事情是,当我通过netcat在shell中运行程序时,直到我实际退出程序之后才会打印“发送到系统的输入命令”。

它应该是./program之后屏幕上出现的第一件事,奇怪的是它在运行时需要输入,就像跳过printf命令一样。我的输入被发送到系统正常(并打印输出),但屏幕是空白的,没有我编码的printfs出现。

但是,一旦我退出程序,所有printfs实际上都会在返回shell之前出现(好像是缓冲的)。有没有想过为什么会这样?如果您需要更多信息,请告诉我,我将很乐意更新该主题。

非常感谢

1 个答案:

答案 0 :(得分:2)

在终端stdout上通常是行缓冲,您必须fflush(stdout)或打印新行'\n'才能看到您的字符已打印。

在非交互式设备上,流通常是完全缓冲的,您必须刷新stdout才能打印字符:

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