C 用叉子叉孩子还是穿线?

C 用叉子叉孩子还是穿线?,c,multithreading,client-server,fork,C,Multithreading,Client Server,Fork,我有一个服务器-客户端系统..其中每个客户端映射服务器上找到的文件。一旦客户机更新了文件,服务器就需要通知客户机更新他们的文件。他们应该取消映射并重新映射文件。我认为这个问题的解决方案是使用write()向客户端发送字符串“Update”(在服务器端)…并使用read()执行无限while循环以继续等待这样的“Update”(在客户端)。然而,这个while循环应该在某种线程或子进程中。哪一个最好?还有其他建议吗?非常感谢。提前感谢。查看如何使用套接字和select语句。通过这样的设置,您可以进

我有一个服务器-客户端系统..其中每个客户端映射服务器上找到的文件。一旦客户机更新了文件,服务器就需要通知客户机更新他们的文件。他们应该取消映射并重新映射文件。我认为这个问题的解决方案是使用write()向客户端发送字符串“Update”(在服务器端)…并使用read()执行无限while循环以继续等待这样的“Update”(在客户端)。然而,这个while循环应该在某种线程或子进程中。哪一个最好?还有其他建议吗?非常感谢。提前感谢。

查看如何使用套接字和select语句。通过这样的设置,您可以进行基于事件的编程

服务器可以发送一条消息,客户端将捕获该消息并相应地采取行动

只需注意您的信号处理程序将执行什么操作(在信号处理上下文中调用许多函数是不安全的)


还要注意比赛情况,小心不要丢失信号。

嗨,乔希,谢谢你的建议。我已经在客户端搜索了使用select(),但是,我仍然不清楚如何在我的场景中应用它。请您进一步解释一下好吗?谢谢你的帮助!那么,有没有可能从服务器向客户端发送一个信号呢?..信号不是只发送给同一台机器上的进程吗?@user3770009,oops。很抱歉我认为您的客户机与服务器在同一台机器上(可能是因为mmap())。请原谅,忽略它。不过,您可以使用套接字方法处理SIGIO(而不是select)。忘记SIGIO,因为处理程序应该调用select()来知道它来自哪个filedescriptor。如果使用MAP_SHARED打开文件,则更新将立即可见。无需取消映射()和mmap()。您仍然需要您的“更新”信号,可能还需要共享互斥来同步访问。