赞
踩
1> 使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上
一份
create.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- //创建一个管道文件
- if(mkfifo("./linux",0664)==-1)
- {
- perror("mkfifo error");
- return -1;
- }
- return 0;
- }
snd.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- //已只写的形式打开管道文件
- int wfd=open("./linux",O_WRONLY);
- if(wfd==-1)
- {
- perror("open error");
- return -1;
- }
- printf("管道文件已打开\n");
- //往里面写东西
- char wbuf[128]="";
- while(1)
- {
- //从终端获取要写入的内容
- printf("请输入>>>");
- fgets(wbuf,sizeof(wbuf),stdin);
- wbuf[strlen(wbuf)-1]='\0';
- //将数据发送到管道文件中
- write(wfd,wbuf,sizeof(wbuf));
- //判断写入的文件
- if(strcmp(wbuf,"quit")==0)
- {
- break;
- }
- }
- //关闭文件
- close(wfd);
-
- return 0;
- }
recv.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- //以只读的形式打开管道文件
- int rfd=open("./linux",O_RDONLY);
- if(rfd==-1)
- {
- perror("open error");
- return -1;
- }
- printf("管道文件已打开\n");
- //已只写的形式打开文件
- int fd1=open("./file.text",O_WRONLY|O_CREAT|O_TRUNC,0664);
- if(fd1==-1)
- {
- perror("open error");
- return -1;
- }
-
- char rbuf[128]="";
- while(1)
- {
- //清空容器
- bzero(rbuf,sizeof(rbuf));
- //读取信息
- read(rfd,rbuf,sizeof(rbuf));
- //判断读取的文件
- if(strcmp(rbuf,"quit")==0)
- {
- break;
- }
- //将读取内容展示到终端
- printf("%s\n",rbuf);
- //将读取的内容写入到文件中
- write(fd1,rbuf,sizeof(rbuf));
- //手动添加换行
- char a='\n';
- write(fd1,&a,1);
- }
- //关闭文件
- close(rfd);
- return 0;
- }
2> 使用有名管道实现两个进程间相互通信
create.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- //创建管道1
- if(mkfifo("./liunx1",0664)==-1)
- {
- perror("mkfifo error");
- return -1;
- }
- //创建管道2
- if(mkfifo("./liunx2",0664)==-1)
- {
- perror("mkfifo error");
- return -1;
- }
-
- return 0;
- }
snd.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- //创建管道1
- if(mkfifo("./liunx1",0664)==-1)
- {
- perror("mkfifo error");
- return -1;
- }
- //创建管道2
- if(mkfifo("./liunx2",0664)==-1)
- {
- perror("mkfifo error");
- return -1;
- }
-
- return 0;
- }
- ubuntu@ubuntu:work2$ cat snd.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- pid_t pid=fork();
- if(pid<0)
- {
- perror("fork error");
- return -1;
- }
- else if(pid==0)
- {
- //以只写的形式打开管道2
- int wfd=open("./liunx2",O_WRONLY);
- if(wfd==-1)
- {
- perror("open error");
- return -1;
- }
- char wbuf[128]="";
- while(1)
- {
- printf("请输入>>>");
- //把终端输入的内容写入容器中
- fgets(wbuf,sizeof(wbuf),stdin);
- wbuf[strlen(wbuf)-1]=0;
- //再写入到管道文件中
- write(wfd,wbuf,strlen(wbuf));
- //判断写入的内容
- if(strcmp(wbuf,"quit")==0)
- {
- break;
- }
- }
-
- //关闭文件
- close(wfd);
- exit(EXIT_SUCCESS);
- }
- //以只读的形式打开管道1
- int rfd=open("./liunx1",O_RDONLY);
- if(rfd==-1)
- {
- perror("open error");
- return -1;
- }
- char rbuf[128]="";
- while(1)
- {
- //清空容器
- bzero(rbuf,sizeof(rbuf));
- //读取管道1中的内容
- read(rfd,rbuf,sizeof(rbuf));
- if(strcmp(rbuf,"quit")==0)
- {
- break;
- }
- printf("收到的信息为:%s\n",rbuf);
- }
-
- //关闭文件
- close(rfd);
- wait(NULL);
- return 0;
- }
recv.c
- #include<myhead.h>
-
- int main(int argc, const char *argv[])
- {
- pid_t pid=fork();
- if(pid<0)
- {
- perror("fork error");
- return -1;
- }
- else if(pid==0)
- {
- //以只读的形式打开管道2
- int rfd=open("./liunx2",O_RDONLY);
- if(rfd==-1)
- {
- perror("open error");
- return -1;
- }
- char rbuf[128]="";
- while(1)
- {
- //清空容器
- bzero(rbuf,sizeof(rbuf));
- //读取管道1中的内容
- read(rfd,rbuf,sizeof(rbuf));
- if(strcmp(rbuf,"quit")==0)
- {
- break;
- }
- printf("收到的信息为:%s\n",rbuf);
- }
- //关闭文件
- close(rfd);
- exit(EXIT_SUCCESS);
- }
- //以只写的形式打开管道1
- int wfd=open("./liunx1",O_WRONLY);
- if(wfd==-1)
- {
- perror("open error");
- return -1;
- }
- char wbuf[128]="";
- while(1)
- {
- printf("请输入>>>");
- //把终端输入的内容写入容器中
- fgets(wbuf,sizeof(wbuf),stdin);
- wbuf[strlen(wbuf)-1]=0;
- //再写入到管道文件中
- write(wfd,wbuf,strlen(wbuf));
- //判断写入的内容
- if(strcmp(wbuf,"quit")==0)
- {
- break;
- }
- }
- //关闭文件
- close(wfd);
- wait(NULL);
-
-
-
-
- return 0;
- }
思维导图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。