• 现象

今天在麒麟系统(类Ubuntu)编写串口通信程序时,
通过select接口获取是否有数据可以读或者写时,select函数有时返回-1,获取errno为22(EINVAL),意思是无效的参数。
#define EINVAL 22 /* Invalid argument */

  • 原因为:

传入最后一个timeout参数,默认值为一个负数。
struct timeval
{
__time_t tv_sec; /* Seconds. /
__suseconds_t tv_usec; /
Microseconds. */
};

  • 解决方案:

将tv_sec和tv_usec设置为0(0表示无限等待)后,问题得到解决。

Logo

更多推荐