我想使用串行com端口进行通信,并且每次调用read函数调用时都想实现超时。
int filedesc = open( "dev/ttyS0", O_RDWR ); read( filedesc, buff, len );
编辑:
我正在使用Linux OS。如何使用选择函数调用实现?
select()有5个参数,首先是最高的文件描述符+ 1,然后是fd_set用于读取,一个用于写入,一个用于异常。最后一个参数是struct timeval,用于超时。错误时返回-1,超时时返回0或设置的集合中文件描述符的数量。
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/select.h> int main(void) { fd_set set; struct timeval timeout; int rv; char buff[100]; int len = 100; int filedesc = open( "dev/ttyS0", O_RDWR ); FD_ZERO(&set); /* clear the set */ FD_SET(filedesc, &set); /* add our file descriptor to the set */ timeout.tv_sec = 0; timeout.tv_usec = 10000; rv = select(filedesc + 1, &set, NULL, NULL, &timeout); if(rv == -1) perror("select"); /* an error accured */ else if(rv == 0) printf("timeout"); /* a timeout occured */ else read( filedesc, buff, len ); /* there was data to read */ }