概述
【操作系统】Linux下进程间通信实现–匿名管道(PIPE),命名管道(FIFO)
实现源码:
server.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#define ERR_EXIT(m)
do{
perror(m);
exit(EXIT_FAILURE);
}while(0)
int main(){
umask(0);
//设置允许当前进程创建文件或者目录最大可操作的权限,避免了创建目录或文件的权限不确定性。
//创建管道
if(mkfifo("mypipe",0644) < 0)
ERR_EXIT("mypipe");
//读端
int rfd = open("mypipe",O_RDONLY);
if(rfd < 0)
ERR_EXIT("open");
char buf[1024];
while(1){
buf[0] = 0;
printf("Please wait...n");
//将文件描述符rfd中的内容放入缓冲区buf中
ssize_t s = read(rfd,buf,sizeof(buf)-1);
if(s > 0){
//成功从管道中读取到数据
buf[s-1] = 0;
printf("[client]:> %sn",buf);
}
else if(0 == s){
//管道中暂时没有数据
printf("client quit, exit now!n");
exit(EXIT_SUCCESS);
}
else{
//读失败
ERR_EXIT("read");
}
}
close(rfd);
return 0;
}
client.c:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#define ERR_EXIT(m)
do{
perror(m);
exit(EXIT_FAILURE);
}while(0)
int main(){
//写端
int wfd = open("mypipe",O_WRONLY);
if(wfd < 0)
ERR_EXIT("open");
char buf[1024];
while(1){
buf[0] = 0;
printf("Please Enter# ");
//更新缓冲区
fflush(stdout);
//将stdout上的数据放入缓冲区buf中
ssize_t s = read(0,buf,sizeof(buf)-1);
if(s > 0){
//成功读取到数据,将缓冲区buf中的数据写入到管道中
buf[s] = 0;
write(wfd,buf,strlen(buf));
}else if(s <= 0){
//读数据失败
ERR_EXIT("read");
}
}
close(wfd);
return 0;
}
程序运行结果:
server:
client:
最后
以上就是寂寞星星为你收集整理的【操作系统】Linux下利用命名管道实现server&client通信的全部内容,希望文章能够帮你解决【操作系统】Linux下利用命名管道实现server&client通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复