首页 >> 百科生活 > 趣味生活 >

fifo是什么意思(fifo)

2023-11-27 13:39:10 来源: 用户:钟玉涛 

大家好,我是小跳,我来为大家解答以上问题。fifo是什么意思,fifo很多人还不知道,现在让我们一起来看看吧!

1、linux中的pipe和fifo的区别

2、在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的。其中消息队列、内存管理是在System V中提出的。

3、进程通信间涉及到了管道,而且管道在shell命令中也大有用处。那就简要说说管道:

4、管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出。它可以有半双工和全双工。半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出。

5、pipe就是一种半双工的管道。其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。

6、如下程序:

7、/*实现子进程向管道中写入数据,父进程读出数据*/

8、#include<unistd.h>

9、#include<sys/types.h>

10、#include<stdio.h>

11、#include<stdlib.h>

12、#include<string.h>

13、int main()

14、{

15、pid_t childpid;

16、int fd[2],nbytes;

17、char string[]="data from child process ";

18、char buf[100];

19、if(pipe(fd)<0)

20、{

21、perror("pipe");

22、exit(1);

23、}

24、if((childpid=fork())==-1)

25、{

26、perror("fork");

27、exit(1);

28、}

29、if(childpid==0)

30、{

31、close(fd[0]);

32、printf("childpid =%2d ",getpid());

33、write(fd[1],string,strlen(string));

34、exit(0);

35、}

36、else

37、{

38、close(fd[1]);

39、printf("parentpid =%2d ",getppid());

40、nbytes=read(fd[0],buf,sizeof(buf));

41、printf("Received string:%s ",buf);

42、}

43、return 0;

44、}

45、下面来说道fifo:

46、fifo是一种全双工,即:它的一端既可以进行读取fd[0],也可以进行写入fd[1]。

47、正因为它的这种通信方式,使其可以用来涉及基于C/S模式的网络通信。具体做法:

48、首先让服务器产生一个服务器端的FIFO,然后让各个客户端产生以其PID为名称的客户端的FIFO,在客户于服务器进行通信时,客户端向服务器端发送自己的PID,以使服务器对客户的请求进行响应时,向其客户端的FIFO写入响应信息。代码实现客户端和服务器进行各自的名称和PID交换。

本文到此讲解完毕了,希望对大家有帮助。

  免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!

 
分享:
最新文章