Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我一直在尝试围绕FIFO,并提出了一个简单的服务器和客户端程序.我不是想做任何花哨的事情,只是为了让一个进程扮演'服务器'的角色,这个过程将“监听”另一个进程传递的任何消息;客户端.这是我写的:server.c#include<stdio.h> #include <fcntl.h> #include <stdlib.h>

我一直在尝试围绕FIFO,并提出了一个简单的服务器和客户端程序.
我不是想做任何花哨的事情,只是为了让一个进程扮演’服务器’的角色,这个过程将“监听”另一个进程传递的任何消息;客户端.
这是我写的:

server.c

#include

正如你所看到的,当我在./server.out&的背景下运行时,这非常简单.它在读取调用时被阻塞,并等待任何人写入clIEntToServer.fifo.到现在为止还挺好.

现在,考虑客户端:
clIEnt.c

#include

这是客户.也很简单的代码.当我从shell运行./a.out时,它可以工作 – 它发送消息,而server.out进程打印你发送%s到服务器.
问题是,当我通过客户端将Quit发送到服务器时,尽管a.out进程根据需要终止,但server.out中的while循环也会中断.意思是,read不再阻塞server.out进程并等待其他客户端,而是服务器程序与客户端一起结束.
为什么会这样?即使在a.out进程结束后,read也不应该再次暂停server.out?最佳答案

when I ran this at background with ./server.out& it’s blocked at the read call and waiting for anyone to write to clIEntToServer.fifo

实际上它在开放时阻止.这是FIFO工作的方式.打开(在阻塞模式下)将阻塞,直到另一端打开FIFO.

the while loop in the server.out breaks as well. meaning,the read no longer blocks the server.out process and awaits other clIEnts,instead,the server program ends

同样,这是正常行为.只有一个客户端进程连接到FIFO,因此当它关闭时,则发送EOF并退出服务器.如果同时将多个客户端连接到FIFO,则在最后一个客户端关闭它之前,您将看不到EOF.如果您希望长时间运行的服务器连续为多个客户端提供服务,最简单的方法是将服务器的FIFO打开为读/写.这种方式总是有一个读写器 – 服务器本身 – 即使最后一个客户端退出也不会看到EOF.当关闭服务器的时候,然后关闭服务器中的适当的一端,让自然在真正的客户退出时采取自己的方式. 总结

以上是内存溢出为你收集整理的c – 写入/读取FIFO文件 – linux全部内容,希望文章能够帮你解决c – 写入/读取FIFO文件 – linux所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c– 写入读取FIFO文件 –linux_系统运维_内存溢出

c– 写入读取FIFO文件 –linux

c– 写入读取FIFO文件 –linux,第1张

概述我一直在尝试围绕FIFO,并提出了一个简单的服务器和客户端程序.我不是想做任何花哨的事情,只是为了让一个进程扮演'服务器'的角色,这个过程将“监听”另一个进程传递的任何消息;客户端.这是我写的:server.c#include<stdio.h> #include <fcntl.h> #include <stdlib.h>

我一直在尝试围绕FIFO,并提出了一个简单的服务器和客户端程序.
我不是想做任何花哨的事情,只是为了让一个进程扮演’服务器’的角色,这个过程将“监听”另一个进程传递的任何消息;客户端.
这是我写的:

server.c

#include

正如你所看到的,当我在./server.out&的背景下运行时,这非常简单.它在读取调用时被阻塞,并等待任何人写入clIEntToServer.fifo.到现在为止还挺好.

现在,考虑客户端:
clIEnt.c

#include

这是客户.也很简单的代码.当我从shell运行./a.out时,它可以工作 – 它发送消息,而server.out进程打印你发送%s到服务器.
问题是,当我通过客户端将Quit发送到服务器时,尽管a.out进程根据需要终止,但server.out中的while循环也会中断.意思是,read不再阻塞server.out进程并等待其他客户端,而是服务器程序与客户端一起结束.
为什么会这样?即使在a.out进程结束后,read也不应该再次暂停server.out?最佳答案

when I ran this at background with ./server.out& it’s blocked at the read call and waiting for anyone to write to clIEntToServer.fifo

实际上它在开放时阻止.这是FIFO工作的方式.打开(在阻塞模式下)将阻塞,直到另一端打开FIFO.

the while loop in the server.out breaks as well. meaning,the read no longer blocks the server.out process and awaits other clIEnts,instead,the server program ends

同样,这是正常行为.只有一个客户端进程连接到FIFO,因此当它关闭时,则发送EOF并退出服务器.如果同时将多个客户端连接到FIFO,则在最后一个客户端关闭它之前,您将看不到EOF.如果您希望长时间运行的服务器连续为多个客户端提供服务,最简单的方法是将服务器的FIFO打开为读/写.这种方式总是有一个读写器 – 服务器本身 – 即使最后一个客户端退出也不会看到EOF.当关闭服务器的时候,然后关闭服务器中的适当的一端,让自然在真正的客户退出时采取自己的方式. 总结

以上是内存溢出为你收集整理的c – 写入/读取FIFO文件 – linux全部内容,希望文章能够帮你解决c – 写入/读取FIFO文件 – linux所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1046982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)