终端上不打印单个字符

发布于 2024-12-07 01:38:10 字数 135 浏览 0 评论 0原文

我有 3 个不同的进程,它们都使用 printf 打印出单个字符。但我在航站楼看不到它们。当我添加换行符 printf("\n H") 时,每个字符都在新行上,我可以看到它们。为什么没有换行符就不起作用?

I have 3 different processes that all print out single characters using printf. But I can't see them in the terminal. When I add a newline, printf("\n H") so each character is on a new line, I can see them. Why doesn't it work without the newline character?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

书信已泛黄 2024-12-14 01:38:10

这是冲水的问题。如果您在每次 printf 之后刷新缓冲区,您应该得到更接近您想要的输出。要刷新标准输出,只需执行 fflush( stdout ) 即可。

Its a matter of flushing. If you flush the buffers after each printf, you should get output closer to what you want. To flush the standard output simply do fflush( stdout ).

甜尕妞 2024-12-14 01:38:10

C 标准为输出流定义了 3 种类型的缓冲:

  • 无缓冲 → 不进行缓冲
  • 行缓冲 → 缓冲直到看到换行符
  • 完全缓冲 → 缓冲到缓冲区大小

输出流的缓冲类型可以通过 setvbuf( 3) 和 setbuf(3) 函数。

C 标准要求 stderr 在启动时不完全缓冲(在许多实现中通常是不缓冲的,以便尽快发现错误);仅当可以确定 stdout 不引用终端时, stdout 才会完全缓冲(当它引用终端时,许多实现将其初始化为行缓冲,这就是您所看到的) 。

The C standard defines 3 types of buffering for output streams:

  • Unbuffered → no buffering done
  • Line-buffered → buffer until newline seen
  • Fully-bufferd → buffer up to the buffer size

An output stream's buffering type can be changed via the setvbuf(3) and setbuf(3) functions.

The C standard requires stderr to not be fully-buffered at startup (it is usually unbuffered on many implementations, so as to see errors as soon as posible); and stdout to be fully-buffered only if it can be determined to not refer to a terminal (when it refers to a terminal, many implementations initialize it as line-buffered, which is what you are seeing).

埋情葬爱 2024-12-14 01:38:10

使用'write(1,&c,1)'系统调用,或者

fprintf(stderr,'%c', c);

use'write(1,&c,1)' system call, or

fprintf(stderr,'%c', c);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文