是否可以在 C 中编写您自己的 kbhit()?
Is it possible to program your own kbhit() in C?
我在我的大学学习了 class 编程,并且我正在研究一些程序。我想知道是否可以编写我自己的 kbhit()
函数。如果可以的话,kbhit()
是如何编码的。
目的是我需要知道我使用的函数是如何工作的。
视情况而定。
On windows stdio(标准 io,如 stdin/stdout)总是阻塞,因此您需要使用 os 特定的系统调用来避免像 read 这样的阻塞调用。
在 Linux 上,您可以使用 fcntl 将 stdio 更改为非阻塞,从而避免需要专门的函数调用。
是的,有可能。
这就是它的工作原理:
It returns a non-zero integer if a key is in the keyboard buffer. It will not wait for a key to be pressed.
基本上你从stdin检查(假设是C语言键盘的默认输入数据)。
有一个实现here,您可以从中着手。
是也不是。
C语言没有输入输出的概念。它依赖于一个标准库(基本上是用 C 语言编写的),而后者又依赖于系统调用。
标准库、类 Unix 系统通用的系统调用集和 Windows 都不处理非阻塞系统调用,因此您必须调用系统特定的系统调用。
但同样,您可以从 C 语言轻松调用它们。
我在我的大学学习了 class 编程,并且我正在研究一些程序。我想知道是否可以编写我自己的 kbhit()
函数。如果可以的话,kbhit()
是如何编码的。
目的是我需要知道我使用的函数是如何工作的。
视情况而定。
On windows stdio(标准 io,如 stdin/stdout)总是阻塞,因此您需要使用 os 特定的系统调用来避免像 read 这样的阻塞调用。
在 Linux 上,您可以使用 fcntl 将 stdio 更改为非阻塞,从而避免需要专门的函数调用。
是的,有可能。
这就是它的工作原理:
It returns a non-zero integer if a key is in the keyboard buffer. It will not wait for a key to be pressed.
基本上你从stdin检查(假设是C语言键盘的默认输入数据)。
有一个实现here,您可以从中着手。
是也不是。
C语言没有输入输出的概念。它依赖于一个标准库(基本上是用 C 语言编写的),而后者又依赖于系统调用。
标准库、类 Unix 系统通用的系统调用集和 Windows 都不处理非阻塞系统调用,因此您必须调用系统特定的系统调用。
但同样,您可以从 C 语言轻松调用它们。