- 阻塞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