【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;
}

相关推荐
ROCKY_81714 分钟前
计算机网络考试考点——应用层
服务器·网络·计算机网络
n***s90918 分钟前
IP地址、子网掩码(NETMASK)和网关(Gateway)
tcp/ip·gateway·智能路由器
e***749519 分钟前
Modbus报文详解
服务器·开发语言·php
java_logo21 分钟前
MySQL Server Docker 容器化部署指南
linux·运维·数据库·docker·容器
运维管理30 分钟前
anolis openeuler 文件复制上用命令-学习篇
服务器
I***t71631 分钟前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
誰能久伴不乏33 分钟前
Linux文件套接字AF_UNIX
linux·服务器·c语言·c++·unix
a413244744 分钟前
如何解决centos上oracle连接问题
linux·oracle·centos
h***34631 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
星释1 小时前
Rust 练习册 97:Run-Length Encoding 压缩算法
java·linux·rust