需要具有非阻塞命名管道,能够在Linux上的c中进行双向通信

需要具有非阻塞命名管道,能够在Linux上的c中进行双向通信,c,linux,C,Linux,我想创建一个服务器和一个客户端(两个独立的程序),在服务器中创建 两个命名管道(我想这是双向流量的最低要求),然后 客户端启动,客户端和服务器应该能够双向发送和接收数据 所有的时间(全双工类型)。我想这将需要我有非阻塞命名管道。希望得到一些帮助,因为我已经能够创建半双工类型的通信 但要在客户机和服务器之间实现连续无缝的数据传输却很困难 谢谢可能的选项: 本地域套接字:具有SOCK_流、SOCK_DGRAM、SOCK_seq数据包类型的AF_本地族。套接字可以是“内存中”,这意味着您可以使用唯一的

我想创建一个服务器和一个客户端(两个独立的程序),在服务器中创建 两个命名管道(我想这是双向流量的最低要求),然后 客户端启动,客户端和服务器应该能够双向发送和接收数据 所有的时间(全双工类型)。我想这将需要我有非阻塞命名管道。希望得到一些帮助,因为我已经能够创建半双工类型的通信 但要在客户机和服务器之间实现连续无缝的数据传输却很困难

谢谢

可能的选项:

  • 本地域套接字:具有SOCK_流、SOCK_DGRAM、SOCK_seq数据包类型的AF_本地族。套接字可以是“内存中”,这意味着您可以使用唯一的字符串连接到它,也可以是文件系统中的套接字文件。它的工作原理与任何网络插座一样,是全双工的

  • 两个管道:一个用于读取,一个用于写入(另一个过程反之亦然)。与本地域套接字相比,跟踪两个管道可能要复杂一些


  • 查看管道上的部分和Unix套接字上的部分。

    您是否考虑过使用
    select()
    要处理命名管道的读取?

    您想通过网络进行进程间通信或客户端-服务器通信吗?进程间通信不是网络通信。同意-
    AF\u UNIX
    /
    AF\u LOCAL
    套接字才是您真正想要的。您好,我知道我应该使用插座,但要求是管道。我使用两个命名管道(一个用于读取,一个用于写入)编写了代码,并且能够实现双向数据流。逻辑是这样的,我用O_NONBLOCK标志打开一个命名管道进行读取,启动一个无限循环尝试读取内容,如果它返回的字节数超过0,我打开另一个管道进行写入(用O_NONBLOCK标志),将接收到的内容写入该管道并关闭它。这是我正在解释的服务器代码。它可以工作,但当它启动时,几乎占用了我所有的cpu。我如何降低cpu使用率。请帮助。您的CPU使用率来自无限循环。除非你有其他工作要做,否则在阅读管道时只需阻塞即可。您可能需要考虑一个事件循环,它可以管理读取管道的空闲轮询,并允许您同时进行其他工作。