linux非阻塞输入函数吗
linux非阻塞输入函数吗详细介绍
在 Linux 系统中,若要实现非阻塞输入,可借助不同的函数达成。下面为你介绍一些常用的方法。
1. 使用
select 函数
select 函数能够监控多个文件描述符的状态变化,包含标准输入(文件描述符为 0)。你可以利用它来判断是否有输入就绪,进而实现非阻塞输入。
c
fd_set readfds
timeout
buffer
readfds
readfds
timeouttv_sec
timeouttv_usec
activity readfds timeout
activity
activity
readfds
buffer buffer
buffer
在上述代码里,select 函数会等待 2 秒,查看标准输入是否有数据可读。要是有数据,就把它读取并打印出来;若超时仍无输入,则输出提示信息。
2. 使用
termios 结构体和
fcntl 函数
借助 termios 结构体能够修改终端的属性,让标准输入变为非阻塞模式。同时,fcntl 函数也可用于设置文件描述符的属性。
c
oldt newt
oldf
ch
STDIN_FILENO oldt
newt oldt
newtc_lflag ICANON ECHO
STDIN_FILENO TCSANOW newt
oldf STDIN_FILENO F_GETFL
STDIN_FILENO F_SETFL oldf O_NONBLOCK
STDIN_FILENO ch
ch
STDIN_FILENO TCSANOW oldt
STDIN_FILENO F_SETFL oldf
9912345678910111213800813800425262728293031323334
() { , ; ; ;
(, &); = ; . &= ~( | ); (, , &); = (, , ); (, , | );
((, &, ) == ) { (\n, ); } { (\n); }
(, , &); (, , );
;}
此代码会把标准输入设置成非阻塞模式,尝试读取一个字符。若有输入就打印出来,没有则输出提示信息。最后,会恢复终端的原始属性。
这些方法都能实现非阻塞输入,你可依据自身需求挑选合适的方法。