专栏名称: Linux内核之旅
Linux内核之旅
目录
相关文章推荐
今天看啥  ›  专栏  ›  Linux内核之旅

高级IO之非阻塞IO和阻塞IO

Linux内核之旅  · 公众号  · linux  · 2024-02-27 14:28

文章预览

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  {      // 读取成功,处理数据 } 非阻塞 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览