有没有办法在不使用共享内存的情况下从另一个进程更改进程的数据?

时间:2011-12-26 15:48:04

标签: c linux

我正在研究一个保险丝程序,当调用保险丝中的read()调用时,它将读取特定文件A并将其保存到其缓冲区。在我的情况下,我让fuse向我的程序发送一条消息,它从远程服务器检索数据并将其保存到该文件A,然后保险丝读取该文件以获取数据。

我想知道有没有办法让我的程序将数据直接保存到保险丝缓冲区,并避免I / O操作。命名管道是一个不错的选择吗?我的意思是它将数据存储在内存中吗?或者我可以将此缓冲区更改为共享内存吗?我知道如何创建共享内存,但不知道我是否可以转换它。这似乎是一个私人。

谢谢你们。

2 个答案:

答案 0 :(得分:1)

哦,我想在这里你想在两个不同的过程之间进行一些沟通,然后 IPC(进程间通信)的想法来了..

有5种方法可以做到这一点

1 共享内存允许进程通过简单的阅读和进行通信 写入指定的内存位置。

2 映射内存与共享内存类似,不同之处在于它与a关联 文件系统中的文件。

3 管道允许从一个流程到相关流程的顺序通信。

4 FIFO 与管道类似,只是不相关的进程可以通信 因为管道在文件系统中被赋予了名称。

5 套接字支持不相关进程之间的通信,即使是在不同进程上也是如此 计算机。

我认为这里共享内存将是不错的选择。

1> 1st declare some shared memory in your program then attache it with fuse

2> when fuse send a message then your program should get data from server 
and save it to that shared memory 

3> make some signaling methods(to avoid any race condition) so after that 
fuse can use that data 

答案 1 :(得分:0)

也许你可以写一些mmap /proc/1234/mem其中1234是目标进程的pid,但我不建议这样做(并且肯定存在权限问题)。这仍然是一种奇怪的(和Linux特定的)共享内存的方式。 (我不确定它是否可行)。

Mr32's answer更合适。