Linux 下 Mono 中的 ReadConsoleOutput、WriteConsoleOutput、ReadConsoleInput 功能
我在程序的 .Net 版本中通过 P/Invoke 使用三个本机 WinApi 函数: ReadConsoleOutput,WriteConsoleOutput, ReadConsoleInput。 Linux下Mono对应的功能如何实现?
我了解标准 System.Console 类。 但由于某些奇怪的原因,此类不以任何方式支持前面提到的 winapi 函数的功能。
I use in .Net version of my program three native WinApi functions through P/Invoke:
ReadConsoleOutput, WriteConsoleOutput, ReadConsoleInput.
How to implement this functionality in Mono counterpart under Linux?
I know about standart System.Console class. But this class for some strange reason does not support functionality of previously mentioned winapi-functions in any way.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您重写 I/O,以便它跟踪屏幕本身应该显示的内容(现在不应占用太多内存),并且仅使用
Console
类进行更新,你应该发现 Mono 的实现可以跟上。 Mono 还可以通过Mono.Terminal
命名空间,但坚持使用Console
将更加可移植。 您仍然可以通过SetCursorPosition
方法、BackgroundColor
属性等使用它进行定位和颜色。If you rewrite your I/O so that it keeps track of what ought to be on the screen itself (which shouldn't take up too much memory these days), and only update using the
Console
class, you should find that Mono's implementation can keep up. Mono also comes with access to ncurses functionality via theMono.Terminal
namespace, but sticking toConsole
will be more portable. You can still use it for positioning and color, viaSetCursorPosition
method,BackgroundColor
property, etc.对于 ReadConsoleInput 的等效功能,可以使用 libtermkey 库。
ReadConsoleOutput 在 Linux 中是不可能的,但您可以将数据存储在自定义屏幕缓冲区中。 使用 NCurses 可以轻松实现 WriteConsoleOutput。
看看Windows和Posix平台中实现的事件循环。 使用的主要函数有:poll()、pipe()、writeInt64()、readInt64() - 来自标准 libc:
For functionality equivalent for ReadConsoleInput use can use libtermkey library.
ReadConsoleOutput is impossible in Linux, but you can store the data in custom screen buffer. WriteConsoleOutput can be easy implemented using NCurses.
Look at the event loop implemented in Windows and Posix platforms. Main functions used are: poll(), pipe(), writeInt64(), readInt64() - from standard libc: