Tag: ipc

Linux内核与用户空间程序之间的通信

我目前正在编写Linux内核模块,并且在实现与用户空间程序的通信时遇到问题。 此内核模块需要接收用户空间程序发出的任务,并在完成后将结果发送回用户空间程序。 在内核模块执行其工作时,应阻止用户空间程序。 我认为内核用户空间IPC或Unix套接字会很好,但我没有找到谷歌的例子。 目前我丑陋的解决方案是导出chardev并让用户空间程序将请求写入设备文件,并从中读取结果。 但我只能在每次open()调用时发出一个请求,这会导致新问题。 我真的需要一个IPC或类似套接字的东西。 谢谢!

共享内存或mmap – Linux C / C ++ IPC

上下文是进程间通信,其中一个进程(“服务器”)必须将固定大小的结构发送到在同一台机器上运行的许多侦听进程(“客户端”)。 在Socket Programming中我很自在。 为了更快地在服务器和客户端之间进行通信并减少副本数量,我想尝试使用共享内存(shm)或mmaps。 操作系统是RHEL 64位。 由于我是新手,请建议我应该使用哪个。 如果有人能指点我一本书或在线资源来学习同样的东西,我会很感激。 谢谢你的回答。 我想补充一点,服务器(市场数据服务器)通常会接收多播数据,这将导致它每秒向“客户端”“发送”大约200,000个结构,其中每个结构大约为100字节。 shm_open / mmap的实现是否仅对大型数据块或大量小型结构的性能优于套接字?

创建进程的多个子进程并维护其所有PID的共享数组

我已经分叉了几次并在C中创建了一堆子进程。我想将它们的所有PID存储在共享数组中。 PID的排序无关紧要。 例如,我创建了32个进程。 我希望有一个32整数长数组,它可以存储每个PID,并且每个进程都可以访问它们。 什么是最好的方法来做到这一点。

为什么在IPC的代码中打印时间相同

我编写了一段代码来理解IPC和读写函数的基本知识。 由于读取function是阻塞的,因此读取将等待,直到其他进程将数据写入管道的另一端。 我在父进程中的write()之前进行了sleep调用。 在read()之前和之后的子进程中,我有打印时间。 #include int main() { int fd[2], err, pid; FILE *fp; char *buf; buf = malloc(12); fp = fopen(“BE1.txt”,”w”); err = pipe(fd); if(err == -1) printf(“Error while creating pipe”); pid = fork(); if(pid == -1) printf(“Error while creating process”); if(pid == 0) { fprintf(fp,”before read %s\n”, __TIME__); // fflush(fp); read(fd[0], buf, 12); […]

如何等待数据写入管道的另一端

我正在用C开发一个应用程序。父子进程通过管道进行通信。 在写入管道之前,父进程执行另一个语句。 在示例代码中,我使用sleep(10)来延迟。 在子进程中,它应该从管道中读取数据。 但是在子进程的管道读取端没有读取数据。 int main() { int pid; FILE *fp; fp = fopen(“test.txt”,”w”); char *buff; int fd[2]; int count = 0 ; pipe(fd); pid = fork(); if(pid == 0) { close(fd[1]); ioctl(fd[0], FIONREAD, &count); fprintf(fp,”Value of count: %d “,count); buff = malloc(count); fprintf(fp,”\n TIME before read: %s”,__TIME__); read(fd[0], buff, count); fprintf(fp,”\nbuffer: %s\n TIME […]

如何使用共享内存在两个进程之间进行通信

我试图在两个进程之间进行通信。 我试图在一个进程中将数据(如姓名,电话号码,地址)保存到共享内存,并尝试通过其他进程打印该数据。 process1.c #include #include #include int main () { int segment_id; char* shared_memory[3]; int segment_size; key_t shm_key; int i=0; const int shared_segment_size = 0x6400; /* Allocate a shared memory segment. */ segment_id = shmget (shm_key, shared_segment_size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); /* Attach the shared memory segment. */ shared_memory[3] = (char*) shmat […]

使用node-ipc和unix套接字在NodeJS和C之间进行通信

我想通过Unix套接字使用node-ipc在NodeJS和C程序之间进行通信,根据该主页,这是最快的选择。 (他们将在同一台机器上)。 该软件包声称它可以与C程序通信。 (我必须进行健全检查)。 问题是示例不提供示例C代码,我接下来不知道如何让他们说话。 有人能指出我的C代码示例来匹配那些客户端/服务器示例吗? 例如, 我如何调整本教程在C中使用unix管道 (假设我不完全偏离轨道?!也许它是我想要的“ 域套接字 ”?)这对我来说没有任何意义,我我错过了至关重要的事情。

叉父母孩子沟通

我需要一些方法让父进程分别与每个子进程通信。 我有一些孩子需要与父母分开与其他孩子分开。 父母是否有办法与每个孩子建立私人沟通渠道? 例如,孩子也可以向父母发送一个struct变量吗? 我对这些事情不熟悉,所以对任何帮助表示赞赏。 谢谢

什么是消息队列中的目的ftok

我已经开始在Linux上阅读消息队列中的一种IPC机制。但在第一步,我有一些非常基本的问题。 使用ftok()生成唯一ID(密钥)以及要生成的唯一ID。 我们不能使用简单的数字来获取我们的密钥而不是使用ftok()吗? msget函数中参数key的用途是什么? #include “sys/msg.h” key = ftok(“/home/beej/somefile”, ‘b’); msqid = msgget(key, 0666 | IPC_CREAT); msqid和key什么区别?

如何在LynxOS / POSIX中同步对共享内存的访问?

我正在通过共享内存进行通信的LynxOS SE (POSIX conformant)系统上实现两个进程。 一个过程将充当“生产者”,另一个过程充当“消费者”。 在multithreading系统中,我的方法是使用互斥和condvar(条件变量)对,消费者等待condvar(使用pthread_cond_wait ),生成器在更新共享内存时用信号通知(使用pthread_cond_wait ) 。 如何在多进程架构而不是multithreading架构中实现这一目标? 是否有LynxOS / POSIX方法来创建可在进程之间使用的condvar / mutex对? 或者在这种情况下,其他一些同步机制更合适吗?