使用libev时串口ttyUSB0读取块

时间:2018-04-16 10:50:12

标签: c linux libev

我有一个串口ttyUSB0,用NONBLOCK打开它。

fd = open(args_info.dev_arg, O_RDWR | O_NONBLOCK);

使用read会立即返回,一切正常。但是当使用libev

ev_io_init(&serial->recv_ctx->io, serial_recv_cb, fd, EV_READ);

serial_recv_cb将阻止直到100字节。如果数据长度小于100字节,则永远不会调用serial_recv_cb

[root@jane client]# ./tcptrans --dev /dev/ttyUSB0 -d 7 --nic wlp2s0
serial.c +163 serial_recv_cb(): DEBUG: fd: 5, size: 100
serial.c +163 serial_recv_cb(): DEBUG: fd: 5, size: 100

我认为serial_recv_cb将被立即调用。为什么libev会阻止?

1 个答案:

答案 0 :(得分:0)

termiosVMINVTIME。我的VMIN设置为100,VTIME为0.因此将等到100字节。