fifo和pipe有什么区别

 我来答
发热管喝白酒
2016-08-11
知道答主
回答量:10
采纳率:0%
帮助的人:2.8万
展开全部
linux中的pipe和fifo的区别
在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的。其中消息队列、内存管理是在System V中提出的。
进程通信间涉及到了管道,而且管道在shell命令中也大有用处。那就简要说说管道:
管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出。它可以有半双工和全双工。半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出。
pipe就是一种半双工的管道。其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。
如下程序:
/*实现子进程向管道中写入数据,父进程读出数据*/

#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
pid_t childpid;
int fd[2],nbytes;
char string[]="data from child process\n";
char buf[100];

if(pipe(fd)<0)
{
perror("pipe");
exit(1);
}
if((childpid=fork())==-1)
{
perror("fork");
exit(1);
}
if(childpid==0)
{
close(fd[0]);
printf("childpid =%2d\n",getpid());
write(fd[1],string,strlen(string));
exit(0);
}
else
{
close(fd[1]);
printf("parentpid =%2d\n",getppid());
nbytes=read(fd[0],buf,sizeof(buf));
printf("Received string:%s\n",buf);
}
return 0;
}
下面来说道fifo:
fifo是一种全双工,即:它的一端既可以进行读取fd[0],也可以进行写入fd[1]。
正因为它的这种通信方式,使其可以用来涉及基于C/S模式的网络通信。具体做法:
首先让服务器产生一个服务器端的FIFO,然后让各个客户端产生以其PID为名称的客户端的FIFO,在客户于服务器进行通信时,客户端向服务器端发送自己的PID,以使服务器对客户的请求进行响应时,向其客户端的FIFO写入响应信息。代码实现客户端和服务器进行各自的名称和PID交换。
AiPPT
2024-12-03 广告
作为北京饼干科技有限公司的一员,对于市场上各类工具都有所了解。就AiPPT而言,它确实为用户提供了便捷高效的PPT制作体验。通过智能化的辅助功能,用户能够快速生成专业且富有创意的演示文稿,极大地节省了时间和精力。无论是对于个人用户还是企业团... 点击进入详情页
本回答由AiPPT提供
newplanprince
2016-07-20 · TA获得超过424个赞
知道小有建树答主
回答量:368
采纳率:66%
帮助的人:139万
展开全部
pipe就是一种半双工的管道。其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。
fifo是一种全双工,即:它的一端既可以进行读取fd[0],也可以进行写入fd[1]。
正因为它的这种通信方式,使其可以用来涉及基于C/S模式的网络通信。具体做法:
首先让服务器产生一个服务器端的FIFO,然后让各个客户端产生以其PID为名称的客户端的FIFO,在客户于服务器进行通信时,客户端向服务器端发送自己的PID,以使服务器对客户的请求进行响应时,向其客户端的FIFO写入响应信息。代码实现客户端和服务器进行各自的名称和PID交换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bb9ba1f7
2016-07-13 · TA获得超过1107个赞
知道小有建树答主
回答量:1259
采纳率:7%
帮助的人:355万
展开全部
linux中的pipe和fifo的区别
在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的。其中消息队列、内存管理是在System V中提出的。
进程通信间涉及到了管道,而且管道在shell命令中也大有用处。那就简要说说管道:
管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出。它可以有半双工和全双工。半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出。
pipe就是一种半双工的管道。其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ddooo了
2016-08-27
知道答主
回答量:9
采纳率:0%
帮助的人:2.7万
展开全部
linux中的pipe和fifo的区别
在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的.其中消息队列、内存管理是在System V中提出的.
进程通信间涉及到了管道,而且管道在shell命令中也大有用处.那就简要说说管道:
管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出.它可以有半双工和全双工.半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出.
pipe就是一种半双工的管道.其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据.如果现有两个进程要利用pipe进行通信.此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个.
如下程序:
/*实现子进程向管道中写入数据,父进程读出数据*/
#include
#include
#include
#include
#include
int main()
{
pid_t childpid;
int fd[2],nbytes;
char string[]="data from child process\n";
char buf[100];
if(pipe(fd)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
修元明0JC923
2016-08-19
知道答主
回答量:35
采纳率:0%
帮助的人:5.4万
展开全部
在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的。其中消息队列、内存管理是在System V中提出的。
进程通信间涉及到了管道,而且管道在shell命令中也大有用处。那就简要说说管道:
管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出。它可以有半双工和全双工。半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出。
pipe就是一种半双工的管道。其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。
如下程序:
/*实现子进程向管道中写入数据,父进程读出数据*/

#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
pid_t childpid;
int fd[2],nbytes;
char string[]="data from child process\n";
char buf[100];

if(pipe(fd)<0)
{
perror("pipe");
exit(1);
}
if((childpid=fork())==-1)
{
perror("fork");
exit(1);
}
if(childpid==0)
{
close(fd[0]);
printf("childpid =%2d\n",getpid());
write(fd[1],string,strlen(string));
exit(0);
}
else
{
close(fd[1]);
printf("parentpid =%2d\n",getppid());
nbytes=read(fd[0],buf,sizeof(buf));
printf("Received string:%s\n",buf);
}
return 0;
}
fifo是一种全双工,即:它的一端既可以进行读取fd[0],也可以进行写入fd[1]。
正因为它的这种通信方式,使其可以用来涉及基于C/S模式的网络通信。具体做法:
首先让服务器产生一个服务器端的FIFO,然后让各个客户端产生以其PID为名称的客户端的FIFO,在客户于服务器进行通信时,客户端向服务器端发送自己的PID,以使服务器对客户的请求进行响应时,向其客户端的FIFO写入响应信息。代码实现客户端和服务器进行各自的名称和PID交换。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式