文章预览
unset unset 非阻塞I/O unset unset 非阻塞 I/O(Input/Output)是一种在进行文件和套接字操作时不阻塞进程的机制。在 Linux 中,非阻塞 I/O 可以通过设置文件描述符(File Descriptor)为非阻塞模式来实现。 文件描述符的非阻塞设置 使用 fcntl 函数: # include int flags = fcntl(fd, F_GETFL, 0 ); flags |= O_NONBLOCK; fcntl(fd, F_SETFL, flags); 上述代码将文件描述符 fd 设置为非阻塞模式。 使用 ioctl 函数: # include ioctl(fd, FIONBIO, ); // 其中 arg 为 0 表示阻塞,为 1 表示非阻塞 这将 fd 设置为非阻塞( arg 为 1)或阻塞( arg 为 0)。 非阻塞 I/O 操作 非阻塞读取: ssize_t n = read(fd, buf, sizeof (buf)); if (n == -1 & & (errno == EAGAIN || errno == EWOULDBLOCK)) { // 没有数据可读,可以稍后再试或进行其他操作 } else { // 读取成功,处理数据 } 非阻塞
………………………………