有名管道 ====》有名称的管道 ===》FIFO ====》在文件系统中可见文件
具备基本的管道所有特性:
具有有名管道自有的特性:
1、文件系统可见
2、文件读写方式调整;
3、有名管道文件可以单独创建;
使用框架:
创建有名管道 =》打开有名管道》读写有名管道 ==》关闭有名管道 ==》卸载有名管道
1、创建有名管道:
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
功能:该函数可以在指定路径下创建指定权限的有名管道文件。
参数:pathname 要创建的有名管道路径+名称;
mode 要创建的管道文件的权限;
返回值:成功 0
失败 -1;
2、打开有名管道:open
int open(const char *pathname, int flags);
功能:使用该函数打开一个已经创建好的有名管道;
参数: pathname 管道名称+路径
flags O_RDONLY 只读方式打开管道
O_WRONLY 只写方式打开管道
返回值:成功 如果以只读方式打开,则返回值为管道读端
如果以只写方式打开,则返回值为管道写端
失败 -1;
注意:由于管道必须保证读写端同步,如果一端不存在,
则另一端在该函数位置会阻塞等待。
3、管道的读写: 文件io的read 和 write
读: ssize_t read(int fd, void *buf, size_t count);
写: ssize_t write(int fd, const void *buf, size_t count);
4、有名管道的关闭: close() ;
5、卸载有名管道: unlink();
int unlink(const char *pathname);
功能:卸载执行路径下的有名管道文件,即删除管道文件;
参数: pathname 要卸载的目标管道文件
返回值:成功 0
失败 -1;
//有名管道写操作
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#define N 32
int main()
{
int fd;
int ret;
ret=