gpt4 book ai didi

c - libncurses : non-blocking STDIN + select on socket

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:09 25 4
gpt4 key购买 nike

我正在使用 select 从套接字和 STDIN 进行非阻塞读取。在伪代码中:

loop
readable = select(socket, STDIN)
foreach input in readable
if input == STDIN
handle_keyboard_input(read(STDIN))
else
handle_socket_input(read(socket))

上面的效果很好。但现在我想开始使用 libncurses 来构建一个更复杂的基于文本的 UI。 (我可能会有两个窗口:一个大的日志窗口和一个较小的提示窗口。)

据推测,套接字处理将保持不变。但我不清楚 libncurses 如何抽象掉 STDIN。在 libncurses 窗口中进行非阻塞读取的正确用法是什么?

事实上,这是在 Ruby 中,但我只是在 C API 周围使用了薄包装器,所以我觉得将其标记为 C 问题更合适。

最佳答案

基本上,ncurses 仅在您调用输入函数(如 getch)时从其输入流中读取。所以在某种程度上,ncurses 并没有抽象掉任何东西;它所做的只是将两个文件描述符与每个 SCREEN 相关联,一个用于输入,一个用于输出。有关详细信息,请参见 man newterm

如果调用nodelay或者使用timeout/wtimeout设置超时为0,那么getch会立即返回错误如果有相应窗口没有待处理的输入。这基本上就是编写异步输入处理所需的全部内容(就 ncurses 而言)。如果您想使用 select 循环,则需要处理调度后台任务的机制等。ncurses 对多线程应用程序有基本的支持,如果你想走那条路的话。

关于c - libncurses : non-blocking STDIN + select on socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com