Linux系统编程3:fifo
程序员文章站
2024-03-17 23:23:04
...
用来解决没有血缘关系的进程之间的通信
创建一个有名管道
[[email protected] Linux系统编程]$ mkfifo myfifo
也可以在文件中创建:man 3 mkfifo
int mkfifo(const char *pathname, mode_t mode);
另一个文件测试:管道存不存在
管道写端:
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
void sys_err(char* str,int exitno){//封装一个打印错误信息的函数
perror(str);
exit(exitno);
}
int main(int argc,char* argv[]){//传入管道名
char buf[1024]="hello world\n";
int fd;//open返回一个文件描述符
if(argc<2){
printf("%s fifoname\n",argv[0]);
exit(1);
}
fd=open(argv[1],O_WRONLY);//写管道
if(fd<0){
sys_err("open error",1);
}
write(fd,buf,strlen(buf));
close(fd);
return 0;
}
~
读端管道
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
void sys_err(char* str,int exitno){//封装一个打印错误信息的函数
perror(str);
exit(exitno);
}
int main(int argc,char* argv[]){//传入管道名
char buf[1024];
int fd;//open返回一个文件描述符
if(argc<2){
printf("%s fifoname\n",argv[0]);
exit(1);
}
fd=open(argv[1],O_RDONLY);//写管道
if(fd<0){
sys_err("open error",1);
}
int len=read(fd,buf,sizeof(buf));
write(STDOUT_FILENO,buf,len);
close(fd);
return 0;
}
~
~
开第一个终端往管道中写入数据
[[email protected] Linux系统编程]$ gcc 10fifowrite.c && ./a.out myfifo
此时处于阻塞状态,因为没有读端
在开一个终端执行读取操作
[[email protected] Linux系统编程]$ gcc 10fiforead.c && ./a.out myfifo
读写完毕,两个进程都结束
上一篇: lua学习2
推荐阅读
-
Linux系统编程3:fifo
-
【3D游戏编程】6. 物理系统与碰撞
-
玩Linux五年积累的技巧(3) -- 系统(下) 博客分类: Linux linuxbash脚本技巧
-
玩Linux五年积累的技巧(3) -- 系统(下) 博客分类: Linux linuxbash脚本技巧
-
Linux系统python2与python3共存
-
1-3、讯为系统编程write
-
linux操作系统下 Jenkins+SVN+Maven+Tomcat 自动集成环境搭建 博客分类: java编程
-
进程的状态 —— Linux系统编程
-
学习shell咯3 博客分类: Linux Bash编程CC++C#
-
Linux之Shell脚本编程—— sh 与 source (. )区别 (3)