我正在研究一个保险丝程序,当调用保险丝中的read()调用时,它将读取特定文件A并将其保存到其缓冲区。在我的情况下,我让fuse向我的程序发送一条消息,它从远程服务器检索数据并将其保存到该文件A,然后保险丝读取该文件以获取数据。
我想知道有没有办法让我的程序将数据直接保存到保险丝缓冲区,并避免I / O操作。命名管道是一个不错的选择吗?我的意思是它将数据存储在内存中吗?或者我可以将此缓冲区更改为共享内存吗?我知道如何创建共享内存,但不知道我是否可以转换它。这似乎是一个私人。
谢谢你们。
答案 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更合适。