【发布时间】:2023-03-20 04:25:01
【问题描述】:
使用mkstemp 创建的临时文件是否已同步到磁盘?
这是我所拥有的:
程序使用
mkstemp创建临时文件并将fd发送给另一个程序。这个临时文件是
mmap-ped 被两个程序使用并且被大量使用(高达 400 MB/秒的写入和 400 MB/秒的读取;高达每秒 60 次读取和写入)。我无法使用 memfd_create(目标设备可能不支持)。
我们还假设(这几乎是真的)我无法在 tmpfs 上创建此文件(例如在 /tmp 中)。
我需要的是保证这样的文件不会对硬盘造成压力。即使每 5 秒只发生一次,我也不能允许它被写入磁盘。如果我不能得到这样的保证,我会另寻他法。
附加信息(不重要):
我正在为 Android 设备编写 Wayland 合成器。目前临时文件(实际上是路地表面)是在 tmpfs 上创建的。只要不启用 SELinux,一切都可以正常工作。但是如果我启用 SELinux,它会阻止 fd 从客户端传输到合成器。我目前知道的唯一解决方案是在应用程序的主目录中创建临时文件。但如果这样的方式很危险,我会另找一个。
【问题讨论】:
-
“将 fd 发送到另一个程序”是指将 文件名 发送到另一个程序吗?或者也许 forks 另一个继承 fd 的程序?因为 fd 的含义不在于数字本身,将其交给不相关的其他程序并不能为接收程序提供访问同一文件的方法。
-
fd 通过 unix 域套接字传输。在这种情况下,另一个程序可以使用相同的文件。
-
为什么不使用共享内存?
-
sysv shm?它已被弃用。我的程序也是android的wayland compositor。我不能改变所有的 Wayland 客户来使用 shm。他们发送 fd。
-
POSIX shm。它适用于文件描述符和
mmap()。