开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:命名管道创建及读写】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11036
命名管道创建及读写
内容介绍:
一、创建命名管道
二、操作 FIFO 文件时的特点
一、创建命名管道
Int mkfifo(const char *pathname , mode_t mode);
pathname 为路径,mode 为权限,成功返回0,失败返回非0
二、操作 FIFO 文件时的特点
系统调用的I/O函数都可以作用于FIFO,如open,close,read,write等。
打开FIFO时,非阻塞标志(O_NONBLOCK)产生下列影响(未指定则默认为阻塞方式打开)
特点一:
不指定 O_NONBLOCK(即 open 没有位或 O_NONBLOCK)
1、open 以只读方式打开 FIFO 时,要阻塞到某个进程为写而打开此 FIFO
2、open 以只写方式打开 FIFO 时,要阻塞到某个进程为读而打开此 FIFO。
例如:04_fifo_read_1.c 验证阻塞方式,open 的阻塞效果
#include<stdio.h>
#include <unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcnt1.h>
int main(int argc, char *argv[])
{
int fd;
mkfifo("fifo",0777);
fd=open("./fifo",O WRONLY);
if(fd<o){
perror("open");
return 0;
}
printf("open write only sucess\n");
Printf(
“
buf=%s\n
”
)
close(fd);
return 0;
}
以上是以只读的方式打开,执行write之后,默认以阻塞的方式打开,
以只读的方式打开open,否则open会阻塞,等待对方以另外一种方式打开。
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");
memset(but,0,sizeof(buf));
read(fd,buf,100);
printf(
“
buf=%s\n
”
,buf);
close(fd);
return 0;
}
以上通过命名管道实现了进程加速线,以p开头的文件说明是为管道
文件。