开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:验证 read 阻塞 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11037
验证 read 阻塞
open 以只读、只写方式打开 FIFO 时会阻塞,调用 read 函数从 FIFO 里读数据时read 也会阻塞。如果管道里没有数据,read 就会停止。
例:04_fifo_read_2.c以阻塞模式,验证read函数也会阻塞#include<stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcnt1.h>
#include<string.h>
int main(int argc, char *argv[])
{
int fd;
Char buf[101】;
mkfifo("fifo",0777);
fd=open("./fifo",O WRONLY);
if(fd<o){
perror("open");
return 0;
printf("open write only sucess\n");
sleep(10);
write(fd,”hello world”,11);
close(fd);
return 0;
}
在write函数前加sleep(10);read函数10秒之后才会在里面写入。
Read打开之后等待10秒之后才能读出显示打印,从而验证了read函数从FIFO里读数据时read也会阻塞。没数据会一直停止,读到数据会运行。
调用write:
gcc write.c -o write
gcc read.c -o read
调用read后打开,10秒以后才会读出