【Linux网络】五种IO模型与非阻塞IO

五种IO模型与非阻塞IO


文章目录


五种IO模型










高级IO重要概念



实现函数SetNoBlock


轮询方式获取标准输入

代码如下(示例):

c 复制代码
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
void SetNoBlock(int fd) {
	int fl = fcntl(fd, F_GETFL);
	if (fl < 0) {
		perror("fcntl");
		return;
	}
	fcntl(fd, F_SETFL, fl | O_NONBLOCK);
}
int main() {
	SetNoBlock(0);
	while (1) {
		char buf[1024] = { 0 };
		ssize_t read_size = read(0, buf, sizeof(buf) - 1);
		if (read_size < 0) {
			perror("read");
			sleep(1);
			continue;
		}
		printf("input:%s\n", buf);
	}
	return 0;
}

相关推荐
淼淼爱喝水20 小时前
【Ansible 入门实战】三种变量详解
java·linux·数据库·ansible·playbook
Languorous.20 小时前
Linux mkdir、rmdir 命令详解——目录的创建与删除(新手零踩坑)
linux·运维·服务器
樱桃花下的小猫20 小时前
腐蚀Rust-EAC 及官方验证关闭教程
服务器·rust·云鸢互联·零门槛一键开服·腐蚀rust服务器
酷道20 小时前
CentOS 7 安装 Docker
linux·docker·centos
Python-AI Xenon20 小时前
双网卡双网关服务器策略路由配置与持久化完全指南
linux·运维·计算机网络·网络故障排查
network_tester20 小时前
自动驾驶系统TSN时延测试:从理论到实践的关键解析
网络·人工智能·网络协议·tcp/ip·自动驾驶·信息与通信·p2p
最后一个bug20 小时前
ubuntu24.04在docker下迁移gitlab16
linux·运维·docker
遇印记20 小时前
软考知识点(windows系统管理与命令)
运维·服务器·网络·windows·ddos
风曦Kisaki20 小时前
# Linux运维Day03:Nginx 反向代理(服务集群)、负载均衡、四层调度与优化
linux·运维·nginx
十子木20 小时前
git 如何恢复特定版本的内容
linux·git