如何在C中的Linux/OS X上实现非阻塞控制台IO?

推荐答案

你真的不知道.TTY(控制台)是一个非常有限的设备,你几乎不做非阻塞I/O.当你看到一些看起来像非阻塞I/O的东西时,比如在curses/ncurses应用程序中,你所做的事情被称为raw I/O.在原始I/O中,没有对字符的解释,没有擦除处理等.相反,您需要编写自己的代码,在执行其他操作时判断数据.

在现代C程序中,您可以通过另一种方式简化这一点,将控制台I/O放入thread或轻量级进程中.然后,I/O可以以通常的阻塞方式进行,但数据可以插入到队列中,在另一个线程上进行处理.

使现代化

这里有一个curses tutorial,涵盖了更多.

Linux相关问答推荐

在shell 中使用排除模式的grep

是否有例外情况需要在.gitconfig中使用?

如何将数据从Linux内核中的块驱动程序持久存储到存储中?

Bash shell 脚本未通过 TRUE 条件

在 bash 中获取目录或文件的基本名称的快速且正确的方法

根据其他列的值创建一个新列

为什么 8 位字符串文字可以包含多字节字符,而 char 向量不能?

使用打印命令 Select 子域

函数在 shell 脚本中抛出错误语法错误:} unexpected

如何有效地使用 grep?

在使用文件时截断文件 (Linux)

Vagrant chicken-and-egg:与 uid = apache 用户共享文件夹

在 C 中检测 64 位编译

如何使用 Ansible 等待服务器重启?

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

如何在没有空格的情况下打印 awk?

linux中netstat和ss的区别?

在 Linux 中,名称与正则表达式匹配的文件的磁盘使用情况?

Linux:删除多个文件的文件扩展名

如何拖尾除第一行以外的所有行