C ++如何在串行规范通信中实现超时

时间:2015-10-29 01:17:41

标签: c++ serial-port timeout termios

我使用ubuntu作为主机,使用C ++作为语言。

我正在与使用逐行命令的串行设备进行通信。为此,我选择了规范的操作模式,我的termios标志是:

fd = open(portName.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);

struct termios config = { 0 };
config.c_iflag = IGNPAR | ICRNL;
config.c_oflag = 0;
config.c_lflag = ICANON;
config.c_lflag &= ~(ECHO | ECHONL | IEXTEN | ISIG);
config.c_cc[VINTR]    = 0;   
config.c_cc[VQUIT]    = 0;   
config.c_cc[VERASE]   = 0;   
config.c_cc[VKILL]    = 0;   
config.c_cc[VEOF]     = 4;   
config.c_cc[VTIME]    = 0;   
config.c_cc[VMIN]     = 0;   
config.c_cc[VSWTC]    = 0;   
config.c_cc[VSTART]   = 0;   
config.c_cc[VSTOP]    = 0;   
config.c_cc[VSUSP]    = 0;   
config.c_cc[VEOL]     = 0;   
config.c_cc[VREPRINT] = 0;   
config.c_cc[VDISCARD] = 0;   
config.c_cc[VWERASE]  = 0;   
config.c_cc[VLNEXT]   = 0;   
config.c_cc[VEOL2]    = 0;   
if(tcsetattr(fd, TCSAFLUSH, &config) < 0)
{
   std::cout << "Error configuring serial." << std::endl;
}

简单的阅读完成如下:

char buffer[1024]; // 1024 bytes
read(fd, &buffer[0], 1024);

我的问题是,如果我疏忽了通信(即:当连接的设备断电时),我的read语句会挂起,程序会被阻止。

我需要暂停超时,在几秒钟后它将返回错误。据我所知,VTIME和VMIN对规范读取没有影响。

帮助理解如何为这样的读命令启用超时。

0 个答案:

没有答案