命名管道创建及读写|学习笔记

简介: 快速学习命名管道创建及读写

开发者学堂课程【物联网开发- 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开头的文件说明是为管道

文件。

相关文章
|
6月前
|
人工智能 BI
文件的读写
文件的读写。
40 0
|
6月前
|
Linux
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
|
3月前
|
Ubuntu Linux
内核实验(八):实现O-NONBLOCK非阻塞读写
本文通过修改之前的内核模块代码,介绍了如何在Linux内核中实现O_NONBLOCK非阻塞读写机制,并通过在Qemu虚拟机上的测试验证了非阻塞读写操作的正确性。
53 0
内核实验(八):实现O-NONBLOCK非阻塞读写
|
Linux
Linux进程通信 ---匿名/命名管道 --- 共享内存(一)
Linux进程通信 ---匿名/命名管道 --- 共享内存(一)
137 0
|
11月前
|
消息中间件 Unix Linux
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)1
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
447 0
|
11月前
|
存储 消息中间件 监控
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)2
【Linux学习】进程间通信的方式(匿名管道、命名管道、共享内存)
73 0
|
Linux 容器
Linux进程通信 ---匿名/命名管道 --- 共享内存(二)
Linux进程通信 ---匿名/命名管道 --- 共享内存(二)
136 0
|
网络协议 Unix Linux
深入理解Socket的读写
对于Linux网络编程,有很多坑需要我们去踩。在这个时候,我们才会知道理论知识的重要性。无论是哪种语言,网络编程都可以写成厚厚的一本书。举个例子,比如“当网络断掉,我们调用write去往socket中写入数据,为什么返回正常写入呢?”。所以有空多看看《TCP/IP详解》,《UNIX网络编程》等经典书籍来补充网络知识。
|
物联网 Linux 开发者
无名管道读写特点|学习笔记
快速学习无名管道读写特点
无名管道读写特点|学习笔记
|
JavaScript 物联网 Linux
非阻塞方式打开命名管道|学习笔记
快速学习非阻塞方式打开命名管道
非阻塞方式打开命名管道|学习笔记