1

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

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

fgets(abc,128,stdin);

....

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

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

然而,一旦我退出程序,所有的 printfs 在它返回到 shell 之前实际上都会出现(好像被缓冲了)。关于为什么会发生这种情况的任何想法?如果您需要更多信息,请告诉我,我会很乐意更新线程。

非常感谢你

4

1 回答 1

2

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

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

printf("Enter command to send to system \n");
fflush(stdout);
于 2012-02-03T22:10:40.883 回答