Articles of ipc

pipe道vs味精队列

消息队列和Linux中的pipe道有什么区别?

一对多的IPC

我正在寻找一个ipc机制,这将允许从一个进程的数据更新的高吞吐量到许多(数千)。 “服务器”进程将负责高频更新数据结构。 更新后,我想通知“客户”进程的更新,并允许这些进程读取新的数据。 在Linux或FreeBSD环境下,这将是一个好方法吗?

UNIX / Linux IPC:从pipe道读取。 如何知道运行时的数据长度?

我有一个subprocess生成一些可变长度的输出,然后使用半双工pipe道将其发送给父进程。 在父,如何使用read()函数? 由于每次数据可以有不同的长度,我怎么能在运行时知道数据的大小来做缓冲区的任何malloc()? fstat()函数可以在pipe道文件描述符上使用吗? 我知道read()函数将读取指定数量的字节,但如果在请求的字节被读取之前到达文件结尾(而不是EOF字符),将返回0。 我专门运行一个2.6.27-9内核的Ubuntu GNU / Linux。 理查德·史蒂文森在UNIX环境下的高级编程中的所有例子都指定了写入pipe道时的数据长度,或者依赖于fgets()stdio.h函数。 由于我关心速度,我想尽可能远离使用stdio.h。 这将有必要共享内存更快? 谢谢,德鲁夫

如何在两个进程之间用pipe道发送整数!

我想在POSIX系统中用pipe道发送一个整数,但是write()函数用于发送string或字符数据。 有没有办法用pipe道发送整数? 问候

Linux IPC – 多个作家,单个阅读器

我从来没有在Linux上写过任何IPC C ++。 我的问题是,我将有多个客户端(作家),和一个单一的服务器(读者)。 所有这些将在同一台机器上。 编写者将把大块的数据(一个string/结构)传送给读者。 然后读者将在FIFO中读取它们,并与他们做一些事情。 据我所知,Linux上的IPCtypes是Pipes或Sockets / Message Queue。 我只是想知道如果有人能推荐我走下去的路。 我倾向于sockets,但是我没有真正的基础。 在开始这个旅程之前,我有什么要读懂的吗? 谢谢

命令检查消息队列和共享内存在Linux中的状态?

不好意思问这样一个愚蠢的问题,因为我是unix unob。 什么是unix命令来查找共享内存和消息队列以及如何杀死它们?

在(SVS-V)IPC信号量上configurationSELinux权限

我有一堆使用IPC Semaphores进行交互的程序(semget)。 其中一个程序是一个Apache模块,它运行在(某种)受限制的SELinux环境中(我不太清楚)。 该模块能够正确地与任何常规文件进行交互,当然这些文件的SELinux安全上下文也可以正确设置。 但是 – 当我的(模块)去访问IPC信号量,semget调用失败,EPERM。 当SELinuxclosures时,我不会得到这个错误。 所以 – 显然,我需要做一些SELinux安全上下文或Semaphore上的某些工作。 如果这是一个普通的文件,我可以把它叫做“chcon”。 由于这是一个System-V IPC信号量,我不能这样做。 我能做些什么来使这个工作?

IPC共享内存和线程内存之间的性能差异

我经常听说,访问进程之间的共享内存段与线程之间访问进程内存相比没有性能损失。 换句话说,multithreading应用程序不会比使用共享内存的一组进程(不包括locking或其他同步问题)更快。 但我有疑惑: 1)shmat()将本地进程虚拟内存映射到共享段。 这个翻译必须为每个共享内存地址执行,并且可能代表一个重要的成本。 在multithreading应用程序中,不需要额外的转换:所有虚拟机地址都转换为物理地址,就像在不访问共享内存的常规进程中一样。 2)共享内存段必须由内核以某种方式维护。 例如,当附加到shm的所有进程都被closures时,shm段仍然是up的,并且最终可以被新启动的进程重新访问。 在shm段上可能会有一些与内核操作相关的开销。 多进程共享内存系统与multithreading应用程序一样快吗?

Linux下进程之间的最低延迟通知方法

我正在寻找允许一个进程进入hibernate状态并允许其他进程唤醒的最低延迟 IPC。 我正在寻找最低延迟的方法。 迄今为止的一些可能的方法 写一个字节到pipe道并从中读取。 写一个字节到套接字并从中读取。 发送信号(杀死)并等待(sigwait) 使用sem_post / sem_wait 任何其他更好的想法? 任何Linux特定的解决scheme也是好的。

如何在本地使用UDP套接字广播消息?

我想在本地广播消息到许多应用程序。 为此,我认为UDP套接字是最好的IPC,纠正我,如果我worng。 为此,我使用以下代码: 对于广播: /* ** broadcaster.c — a datagram "client" that can broadcast */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #define SERVERPORT 4950 // the port users will be connecting to int main(int argc, char *argv[]) { int sockfd; struct […]