我使用bin / sh作为我的shell通过netcat访问我的linux盒子。我编写了一个小程序,摘录如下:
printf("Enter command to exec \n");
fgets(abc,128,stdin);
....
发生的事情是,当我通过netcat在shell中运行程序时,直到我实际退出程序之后才会打印“发送到系统的输入命令”。
它应该是./program之后屏幕上出现的第一件事,奇怪的是它在运行时需要输入,就像跳过printf命令一样。我的输入被发送到系统正常(并打印输出),但屏幕是空白的,没有我编码的printfs出现。
但是,一旦我退出程序,所有printfs实际上都会在返回shell之前出现(好像是缓冲的)。有没有想过为什么会这样?如果您需要更多信息,请告诉我,我将很乐意更新该主题。
非常感谢
答案 0 :(得分:2)
在终端stdout
上通常是行缓冲,您必须fflush(stdout)
或打印新行'\n'
才能看到您的字符已打印。
在非交互式设备上,流通常是完全缓冲的,您必须刷新stdout
才能打印字符:
printf("Enter command to send to system \n");
fflush(stdout);