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

标签 c linux

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

有没有办法让我的程序把数据直接保存到fuse的buffer中,避免I/O操作。命名管道是一个好的选择吗?我的意思是它是否将其数据存储在内存中?或者我可以将此缓冲区更改为共享内存吗?我知道如何创建共享内存,但不知道是否可以转换它。好像是私有(private)的。

谢谢你们。

最佳答案

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

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

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

2 映射内存类似于共享内存,只是它与一个 文件系统中的文件。

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

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

5 Sockets 支持不相关进程之间的通信,甚至在不同的 计算机。

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

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 

关于c - 有没有办法在不使用共享内存的情况下更改另一个进程的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637158/

相关文章:

c - sscanf 是否被认为可以安全使用?

c - Linux Socket 系统调用 "accept"永远不会返回?

linux - 必须使用 linux 替换第一行第二列中的文本

c - 产生堆栈溢出

linux - 从 tar 归档 Linux 中提取前 10 个最大的文件

linux - 如何更改 ELF 中代码段的对齐方式

c++ - 如何在过滤驱动中读取当前进程的PE头

c - 如何以正确的方式转换 void** 指针?

c - 如何用 C 处理 Linux 控制台中按下的按键?

linux - Linux 中的 VMX 测试中出现软锁定