首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏linux内核指令

    Linux命令mkfifo深度解析

    Linux命令mkfifo深度解析一、引言在Linux操作系统中,mkfifo是一个非常重要的命令,它用于创建命名管道(named pipe),也称为FIFO(First In First Out)文件 二、mkfifo命令的工作原理和主要特点mkfifo命令的工作原理是,在文件系统中创建一个特殊的文件,该文件作为命名管道使用。 通过mkfifo命令的-m参数,可以指定命名管道的权限。 mkfifo命令的语法如下:mkfifo [选项] 文件名常用选项包括:-m:设置命名管道的权限,格式为八进制数字,如0666表示所有用户都有读写权限。 三、mkfifo命令的实际应用示例下面是一个简单的示例,演示如何使用mkfifo命令创建命名管道,并在两个进程间进行通信:在终端A中,使用mkfifo命令创建一个命名管道:mkfifo mypipe在终端

    89610编辑于 2024-06-20
  • 来自专栏开发与安全

    linux系统编程之管道(三):命名管道FIFO和mkfifo函数

    命名管道可以从命令行上创建,命令行方法是使用下面这个命令: $ mkfifo filename 命名管道也可以从程序里创建,相关函数有: int mkfifo(const char *filename 命名管道由mkfifo函数创建,打开用open。 FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,这些工作完成之后,它们具有相同的语义。         perror(m); \         exit(EXIT_FAILURE); \     } while(0) int main(int argc, char *argv[]) {     mkfifo 1024)) > 0)         write(outfd, buf, n);     close(infd);     close(outfd);     return 0; } 程序使用mkfifo

    4.2K60发布于 2018-01-03
  • 来自专栏JAVA人生/面试技巧

    mkfifo - 创建FIFO(命名管道)

    mkfifo - 创建FIFO(命名管道) makefifo test 这条命令创建了了⼀一个名字为 test 的命名管道。 netstat -tulnp | grep 8080 mkfifo test echo "this is a pipe" > test // 写数据 cat < test // 读数据 这种通信⽅方式有缺点吗

    1.1K20发布于 2020-08-25
  • 来自专栏码农爱学习的专栏

    Linux命名管道及函数

    命名管道的创建 命令方式 在shell中可以使用mkfifo命令创建一个命名管道,格式为: mkfifo [option] name 其中option选项用于选择创建FIFO的模式,使用形式为-m mode ,mode为八进制模式,创建示例: mkfifo -m 666 myfifo 创建之后可以在当前文件间看到新建的文件。 函数方式 FIFO管道可通过mkfifo()函数创建,函数原型为: #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char argv[1], mode))<0) { perror("failed to mkfifo! 测试之前先使用mkfifo命令创建一个名为fifo1的命名管道: mkfifo -m 666 fifo1 然后打开两个shell窗口,依次运行write_fifo和read_fifo两个程序。

    3K10发布于 2020-08-04
  • 来自专栏程序员

    Linux进程通信——有名管道

    Linux下建立有名管道的函数是mkfifo。 函数原型: int mkfifo(const char * pathname,mode_t mode); 函数功能:创建一个FIFO文件,用于进程之间的通信。 #include<sys/types.h> #include<sys/stat.h> #include<stdio.h> int main() { int ret; ret = mkfifo = ret) { perror("mkfifo"); } return 0; } ? 可以看到,它以P开头,表面它是一个FIFO文件。 = ret) { perror("mkfifo"); } pid_t pid; pid = fork(); if(0 < pid) {

    3.6K30发布于 2019-05-25
  • 来自专栏C++语法及相关算法详解

    在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生

    与匿名管道(pipe)不同,命名管道拥有一个路径名,存在于文件系统中,通常通过命令 mkfifo 或系统调用mkfifo()创建。即便通信双方毫无血缘(非父子进程),只要知晓这路径,便能互通心声。 ,函数原型如下 #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode) ; 关于 mkfifo 函数 对于参数1,既可以传递绝对路径 /home/xxx/namePipeCode/fifo,也可以传递相对路径 . 和 mkdir 非常像,其实 mkfifo 可以直接在命令行中运行 创建一个名为fifo的命名管道文件 mkfifo fifo p是管道文件,大小为0 这个管道文件也非常特殊:大小为 0,从侧面说明 (fifo_name.c_str(), mode); if (ret < 0) { cerr << "mkfifo fail!

    18310编辑于 2025-11-05
  • 来自专栏计算机视觉理论及其实现

    关于errno头文件

    这个mkfifo函数创建管道时,如果有已存在的同名管道,就会将errno赋值为EEXIST。erron != EEXIST,也就是判断mkfifo函数是否出现“已存在同名管道”的错误。 if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)<0)&&(errno! =EEXIST))这段代码翻译成汉字描述就是:如果((mkfifo函数创建管道,返回值小于0),并且,(错误原因不是 “已存在同名管道”))。 上面更详细的解说是,如果我们用mkfifo()函数创建一个有名管道发生错误(发生错误返回值小于0),但是这个错误不是因为这个管道文件已经存在(有名管道存在再去创建是会出现失败的),而是因为其他原因,这个时候就可以把判断条件写成

    2.8K30编辑于 2022-09-02
  • 来自专栏就业 C++ 综合学习

    【Linux】 管道扩展 — 开始使用命名管道

    2 代码实现 2.1 系统调用 匿名管道的创建是通过系统调用:pipe(int pipefd[2]) 来建立,同样命名管道的创建也有对应的指令:mkfifo MKFIFO(1) User Commands MKFIFO(1) NAME mkfifo - make FIFOs (named pipes) SYNOPSIS mkfifo [OPTION]... Programmer's Manual MKFIFO(3) NAME #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); #include <fcntl.h

    67210编辑于 2024-05-31
  • 来自专栏乐行僧的博客

    进程通信(一)无名管道和有名管道

    (4)半双工的通信方式 使用场景 (1)没有血缘关系的进程间通信 创建方式 (1)mkfifo 管道名 (2)调用函数 mkfifo 函数原型: int mkfifo(const char * pathname,mode_t mode); 参数:路径 权限 下面举例应用mkfifo实现两个无血缘关系进程之间的通信 简单描述:在A进程中向内核缓冲区输入字符串,输入end表示结束进程。 include<sys/stat.h> int main() { int fd = open("FIFO",O_WRONLY);//默认是阻塞的 if(fd == -1) { int n = mkfifo ("FIFO",0664);//创建管道文件FIFO if(-1 == n) { perror("mkfifo"); exit(0); } fd = open("FIFO", if(fd < 0) { int n = mkfifo("FIFO",0664); if(-1 == n) { perror("mkfifo"); exit(0); }

    1.9K20编辑于 2022-02-24
  • 来自专栏C++

    【在Linux世界中追寻伟大的One Piece】命名管道

    1.1 -> 创建一个命名管道 命名管道可以从命令行上创建,命令行方法是使用下面这个命令: $ mkfifo filename 命名管道也可以从程序里创建,相关函数有: int mkfifo (const char *filename,mode_t mode); 创建命名管道: int main(int argc, char *argv[]) { mkfifo 命名管道由mkfifo函数创建,打开用open。 FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后,它们具有相同的语义。 \ do \ { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0) int main(int argc, char* argv[]) { mkfifo ("mypipe", 0644) < 0) { ERR_EXIT("mkfifo"); } int rfd = open("mypipe", O_RDONLY); if (rfd < 0

    70210编辑于 2024-10-01
  • 来自专栏技术杂记

    进程间通讯(二).fifo(1)

    有时被称为命名管道 匿名管道 pipe 只能在两个相关的进程之间使用,而且这两个相关的进程还要有一个共同的创建它们的祖先进程,而通过 FIFO 不相关的进程也能交换数据 在 sys/stat.h 中有关于 mkfifo 的原型声明 /* Create a new FIFO named PATH, with permission bits MODE. */ extern int mkfifo (__const char :要用2个fifo 代码示例 fifoB.c #include <unistd.h> //access,read,write,close 都在这里声明 #include <sys/stat.h> //mkfifo abfifo if(-1 == access(rfifo,F_OK)) //如果rfifo不存在,则创建 { if(0 > (mkfifo(rfifo,0600)) && (EEXIST bafifo if(-1 == access(wfifo,F_OK)) //如果wfifo不存在,则创建 { if(0 > (mkfifo(wfifo,0600)) && (EEXIST

    75010发布于 2021-09-16
  • 来自专栏xcywt

    Linux进程间通信之管道

    但目前很少使用      2)以文件做交互的媒介,管道分为有名管道和无名管道      3)历史上的管道通常是指半双工管道 3.2 管道:有两种形式,命令行和非命令行 (1)命令行:         mkfifo (2)非命令行:这里又分有名管道和无名管道 编程模型:进程A创建管道(mkfifo) -> 进程A写打开管道(open) -> 进程B读打开管道(open) -> 进程A开始往管道里写数据(write) > #include<fcntl.h> #include<stdio.h> #define PIPENAME "pipetest" int main() { // 创建管道 if(mkfifo (PIPENAME, 0666) < 0) { perror("mkfifo"); return -1; } // 写打开管道 int (PIPENAME, 0666) < 0) { perror("mkfifo"); return -1; } // 写打开管道 int

    3.1K80发布于 2018-01-11
  • 来自专栏Initial programming

    初识Linux · 命名管道

    那么我们的第一个任务是了解创建命名管道的函数->mkfifo: 直接man mkfifo查询到的是1号手册的mkfifo,那么我们可以使用试试: 创建了对应管道文件之后,我们可以发现几个特征点,它的名字后面带有 /mypipe"; int CreateFifo() { int n = mkfifo(path.c_str(),0666); if(n < 0) { perror ("mkfifo"); } return n; } 这里使用的头文件相对来说也是比较多的,毕竟涉及到了string mkfifo perror,所以C++的头文件有,C++版的C语言头文件也是有的 = 0) { perror("mkfifo"); } std::cout << "Creater (_fifo_path.c_str(), 0666); if (res < 0) { perror("mkfifo");

    66810编辑于 2024-11-19
  • 命名管道——进程间通信

    -CSDN博客 一、命名管道的使用 1.创建命名管道 1.1.在命令行中: 创建: mkfifo 管道名 删除: rm -rf 管道名 或者: unlink 管道名 1.2.在程序中 创建: 声明如下 : #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 返回值:成功 示例: mkfifo("./filename",0666);//创建 unlink(". #include<cstdio> #include<fcntl.h> #include<unistd.h> using namespace std; int main() { int f = mkfifo 命名管道可以在程序中使用mkfifo命令创建,也可以在程序中使用mkfifo函数创建。然后需要用open打开。 2.使用范围 匿名管道只能用于父子进程之间。 命名管道可用于任意进程之间。

    19310编辑于 2025-11-15
  • 来自专栏学习之路

    【Linux】IPC 进程间通信(一):管道(匿名管道&命名管道)

    命名管道是一种特殊类型的文件(命名管道 -- > mkfifo) 4.2 创建命名管道 Linux系统中,使用 mkfifo 命令创建有名管道文件,再使用两个进程打开即可 $ mkfifo filename 如下图: Linux 系统编程中使用 mkfifo 函数创建一个管道文件,再让两个不相关的进程打开: int mkfifo(const char *pathname, mode_t mode); 参数 功能 mkfifo() 函数的作用是在文件系统中创建一个特殊类型的文件,该文件在外观上类似于普通文件,但实际上是一个FIFO,用于进程之间的通信。 错误处理:对 mkfifo() 函数的返回值进行适当的错误处理,根据具体的错误原因进行相应的处理和日志记录。 命名管道由 mkfifo函数 创建,打开用open。 FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后,它们具有相同的语义。

    1.2K10编辑于 2024-11-19
  • 来自专栏学习

    【Linux】管道通信——命名管道

    无名管道 类型 说明 适用场景 匿名管道 pipe() 创建,仅限于父子进程之间通信 适用于父进程创建子进程并通信 命名管道 mkfifo() 创建,存在于文件系统中,可用于任意进程间通信 适用于独立进程间通信 如何创建命名管道 手动创建命名管道: mkfifo FIFO 这个FIFO也是一个文件,被操作系统特殊标记过,是管道文件。 在C语言库中有一个函数也是mkfifo,这个接口解决了进程间通信的问题。 (gpipefile.c_str(),gmode); if(n < 0)//创建管道文件失败 { cerr<<"mkfifo error"<<endl 通过 mkfifo 创建命名管道,我们可以实现进程间的数据流动,而不必使用共享内存或消息队列等复杂机制。命名管道不仅支持流式数据传输,还能够跨终端、跨进程进行数据交互,极大简化了进程间通信的实现。

    1.2K10编辑于 2025-02-25
  • 来自专栏编程小王

    【Linux篇】轻松搭建命名管道通信:客户端与服务器的互动无缝连接

    1.2 创建命名管道 1.2.1 创建方法 方法一:在命令行创建语法: mkfifo filename 该指令将会创建命名管道filename(管道名称)。 方法二: 使用相关的函数创建,语法如下: int mkfifo(const char *pathname, mode_t mode); 参数说明: pathname:这是要创建的命名管道的路径。 (fifo_path, 0666) == -1) { perror("mkfifo failed"); return 1; } printf(" int n = mkfifo(FIFO_FILE, 0666); // 创建管道,文件名为 FIFO_FILE if (n ! 通过 mkfifo() 函数可以创建命名管道,客户端和服务端通过管道文件进行数据交换。服务端创建并打开管道以读取数据,客户端通过管道向服务端写入消息。

    53710编辑于 2025-04-22
  • 来自专栏Linux

    【Linux】深度探秘命名管道:Linux 进程通信的无声桥梁

    在命令行创建:mkfifo mypipe效果如下:ubuntu@VM-20-9-ubuntu:~/pipeTest/namePipe$ mkfifo mypipeubuntu@VM-20-9-ubuntu mkfifo头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>格式:int mkfifo(const char *pathname, mode_t mode);参数介绍:pathname命名管道的路径名。 (pipePath,md); if(mf<0) { perror("mkfifo"); exit(1); } //打开管道 int fd = open /pipe";//mask码设置mode_t md = 0666;匿名管道是通过pipe函数创建出来了;而命名管道需要先通过mkfifo函数创建,然后再通过open打开使用。

    56210编辑于 2024-11-18
  • 来自专栏北飞的山羊知识库

    【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现

    命名管道由mkfifo函数创建,打开用open FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后,它们具有相同的语义。 一、创建命名管道的函数 #include <sys/stat.h> // 返回值:成功返回0,出错返回-1 int mkfifo(const char *pathname, mode_t mode _name; // 文件路径加文件名 public: Fifo(const string &name) : _name(name) { int n = mkfifo

    59810编辑于 2024-04-15
  • 来自专栏刘晓杰

    UNPv2第四章:管道和FIFO

    4.FIFO FIFO由mkfifo函数创建 #include<sys/types.h> #include<sys/stat.h> int mkfifo(const char * pathname,mode_t Mode参数指定文件权限位 Mkfifo函数已隐含指定O_CREAT|O_EXCL。 也就是说,它要么创建一个新的FIFO,要么返回一个EEXIST错误 管道和FIFO的区别如下: 创建并打开一个管道只需要pipe,创建并打开一个FIFO则需要调用mkfifo再调用open 管道在将它打开着的进程中最后一个关闭它之后自动消失

    68230发布于 2019-02-21
领券