我正在关注一个例子 FUSE Tutorial了解 FUSE 在 Linux 中的工作原理。在示例中,所有动态数据都使用 malloc 分配,并作为用户数据传递给 fuse_main
函数。以后任何熔断器调用都可以访问此数据。这些调用不需要来自同一个进程。这是如何工作的?
为了让问题更清楚,
我使用 ../src/bbfs rootdir mountdir
运行主 bbfs
程序来挂载文件系统。它在 bbfs.c 的 main() 中malloc 被调用。 bbfs 程序还定义了几个 fuse 函数调用。但是这个程序在文件系统挂载后退出。
其他程序(或内核)如何在挂载的文件系统上调用 read()
或 open()
1.如果bbfs程序已经退出,是否访问使用malloc分配的内存? bbfs
程序退出后,OS 不会释放使用 malloc 分配的内存吗?
2.访问定义的函数,如果定义它们的进程已经退出?进程退出后,fuse 函数的目标代码
位于何处?
我对这里的目标代码和堆内存对象的生命周期以及其他程序(或内核)以后如何使用它感到有点困惑。任何帮助或指示将不胜感激。
最佳答案
你的大部分问题都是基于错误的假设:
… But [the FUSE server] exits after the filesystem is mounted.
它实际上并没有退出。只要挂载了文件系统,它就会 fork 到后台并继续运行。
在运行时,一切正常。
关于c - FUSE 程序中的内存分配是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27218837/