gpt4 book ai didi

c - 如何使用 libreadline 在套接字上进行选择?

转载 作者:行者123 更新时间:2023-11-30 15:08:30 27 4
gpt4 key购买 nike

我正在编写一个 C 程序,它向用户提供一个“伪终端”,用户可以在其中输入特殊命令,并且还需要监听来自 UDP 套接字的数据。

目前我正在使用 select() 调用来选择 STDIN 和套接字句柄。当它返回时,我使用 FD_ISSET() 宏来确定程序是否应该响应用户命令或套接字数据。

while (1) {
fd_set fs;
FD_ZERO(&fs);
FD_SET(0, &fs); // stdin.
FD_SET(socket, &fs);

int ret = select(s + 1, &fs, NULL, NULL, NULL);

if (FD_ISSET(0, &fs)) { /* handle terminal command from stdin. */ }

if (FD_ISSET(socket, &fs)) { /* handle socket data. */ }
}

我想使用 GNU readline 库来实现终端,这样我就可以利用它的历史记录和制表符完成功能。看来 readline() 函数使用它自己的方法从 stdin 读取,但是我看不到在 UDP 套接字上进行选择的方法。

有谁知道有什么方法可以做到这一点吗?

谢谢!

最佳答案

Readline 提供了一种方法来执行此操作: http://www.delorie.com/gnu/docs/readline/rlman_41.html

基本上你的代码没问题。您需要调用初始化函数,然后使用 /* 处理来自标准输入的终端命令。 */,您调用rl_callback_read_char()

您可以在此答案中看到一个简单的示例: ncurses and stdin blocking

关于c - 如何使用 libreadline 在套接字上进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350527/

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