• IO学习系列之阻塞IO


    • 阻塞IO:
    • 若资源没有准备就绪,会阻塞等待资源
    • 若资源准备就绪,会获取相关资源
    • 特点:
    • 在所有的IO模型中,阻塞IO是最简单最常用效率最低的;
    • 写阻塞:
    • 无名管道有名管道等进程间的通信;
    • 读阻塞:
    • 管道为例,具体读阻塞操作为:
    • 当进程执行到读操作的时候,若缓冲区有内容,则读取内容继续向下执行,若缓冲区没有内容,进程进入休眠态,直到缓冲区中有内容,由内核唤醒该进程,来读取缓冲区内容,然后继续向下执行;
    • 三个写端:
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	
    	int main(int argc, char const *argv[])
    	{
    	    int fd = open("myfifo1",O_WRONLY);
    	    char buf[128] = {0};
    	
    	    while(true)
    	    {
    	        memset(buf,0,sizeof(buf));
    	
    	        fgets(buf,sizeof(buf),stdin);
    	
    	        buf[strlen(buf)-1] = '\0';
    	
    	        write(fd,buf,sizeof(buf));
    	    }
    	    return 0;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	
    	int main(int argc, char const *argv[])
    	{
    	    int fd = open("myfifo2",O_WRONLY);
    	    char buf[128] = {0};
    	
    	    while(true)
    	    {
    	        memset(buf,0,sizeof(buf));
    	
    	        fgets(buf,sizeof(buf),stdin);
    	
    	        buf[strlen(buf)-1] = '\0';
    	
    	        write(fd,buf,sizeof(buf));
    	    }
    	    return 0;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	
    	int main(int argc, char const *argv[])
    	{
    	    int fd = open("myfifo3",O_WRONLY);
    	    char buf[128] = {0};
    	
    	    while(true)
    	    {
    	        memset(buf,0,sizeof(buf));
    	
    	        fgets(buf,sizeof(buf),stdin);
    	
    	        buf[strlen(buf)-1] = '\0';
    	
    	        write(fd,buf,sizeof(buf));
    	    }
    	    return 0;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 一个读端:
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	#include 
    	
    	
    	int main(int argc, char const *argv[])
    	{
    	    int fd1 = open("myfifo1",O_RDONLY);
    	    int fd2 = open("myfifo2",O_RDONLY);
    	    int fd3 = open("myfifo3",O_RDONLY);
    	
    	    char buf[128] = {0};
    	
    	    while(true)
    	    {
    	        memset(buf,0,sizeof(buf));
    	        read(fd1,buf,sizeof(buf));
    	        printf("myfifo1:%s\n",buf);
    	
    	        memset(buf,0,sizeof(buf));
    	        read(fd2,buf,sizeof(buf));
    	        printf("myfifo2:%s\n",buf);
    	
    	        memset(buf,0,sizeof(buf));
    	        read(fd3,buf,sizeof(buf));
    	        printf("myfifo3:%s\n",buf);       
    	
    	    }
    	
    	    close(fd1);
    	    close(fd2);
    	    close(fd3);
    	    return 0;
    	}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 运行结果:
    	myfifo1:hello
    	myfifo2:world
    	myfifo3:hi
    	myfifo1:china
    	myfifo2:beijing
    	myfifo3:the create wall
    	myfifo1:i love u
    	myfifo2:miss u
    	myfifo3:miss u
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 仅供参考
  • 相关阅读:
    error C2632: ‘char‘ followed by ‘char‘ is illegal
    Hadoop总结
    库存管理“智慧官”上线!北京电信基于飞桨打造主动型库存决策分析系统
    【数据库04】中级开发需要掌握哪些SQL进阶玩法
    Python 练习题讲解
    如何自动化测试你的接口?—— Rest Assured
    SPSS教程:手把手教你绘制簇状条形图
    poll函数
    乐观模式下分库分表合并迁移
    4 | Nikto使用
  • 原文地址:https://blog.csdn.net/qq_41878292/article/details/134228657