首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libreadline在socket上进行选择?

如何使用libreadline在socket上进行选择?
EN

Stack Overflow用户
提问于 2016-05-20 23:37:03
回答 1查看 574关注 0票数 0

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

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

代码语言:javascript
复制
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套接字上进行选择的方法。

有谁知道这样做的方法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-11-08 01:46:27

Readline提供了一种实现此目的的方法:http://www.delorie.com/gnu/docs/readline/rlman_41.html

基本上,你的代码是好的。您需要调用一个初始化函数,然后在有/* handle terminal command from stdin. */的地方调用rl_callback_read_char()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37350527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档