在写代码时,发现一个出现一个问题,就是在旧版本C++编译后,运行正常,当改为C++11编译时,就会出现buffer overflow detected,最后定位后发现在下面代码中出现了问题
fd_set fds;
FD_ZERO(&fds);
FD_SET(fd_, &fds);
r = select(fd_ + 1, &fds, NULL, NULL, &time_val);
就是查询设备是否可读的代码,最后查了相关的问题
Handling more than 1024 file descriptors, in C on Linux
Buffer Overflow in FD_SET in nb_connect
是和fd_set有关,但是为什么和C++11出现溢出,而旧版本正常的原因,还未知,什么时候知道了,再更新博客
解决方法是使用poll或者epoll
#include <poll.h>
struct pollfd pfd_read;
pfd_read.fd = fd_;
pfd_read.events = POLLIN;//查询事件是POLLIN
r = poll(&pfd_read, 1, timeout);