gpt4 book ai didi

c - mkstemp 和硬盘压力

转载 作者:行者123 更新时间:2023-11-30 14:37:48 27 4
gpt4 key购买 nike

使用 mkstemp 创建的临时文件是否已同步到磁盘?

这是我所拥有的:

  1. 程序使用mkstemp创建临时文件并将fd发送到另一个程序。

  2. 此临时文件由两个程序 mmap 处理,并且使用频繁(高达 400 MB/秒的写入速度和 400 MB/秒的读取速度;每个文件最多 60 次读取和写入)第二)。

  3. 我无法使用 memfd_create(目标设备可能不支持)。

  4. 我们还假设(这几乎是正确的)我无法在 tmpfs 上创建此文件(如/tmp)。

我需要的是保证这样的文件不会对硬盘造成压力。我不能允许它写入磁盘,即使这种情况每 5 秒只发生一次。如果我得不到这样的保证,我就会寻找其他方法。

其他信息(不重要):

我正在为 Android 设备编写 wayland 合成器。当前临时文件(实际上是 Wayland 表面)是在 tmpfs 上创建的。只要未启用 SELinux,一切都可以正常工作。但是如果我启用 SELinux,它会阻止 fd 从客户端传输到合成器。我目前知道的唯一解决方案是在应用程序的主目录中创建临时文件。但如果这样危险的话,我会另寻他法。

最佳答案

Are temporary files created with mkstemp synced to disk?

mkstemp 函数不会向它打开的文件赋予任何特殊属性,从而阻止它们同步到磁盘。创建它们的文件系统可能具有这样的属性,但这与文件创建无关。特别是,通过 mkstemp() 创建的文件如果不删除,将无限期地保留。

What I need is guarantee that such file will not stress hard disk. I can't allow it to be written to disk even if this only happens once every 5 seconds. If I can't get such guarantee, I will look for another way.

据我所知,即使是 tmpfs 文件系统也不能保证其内容将保持锁定在内存中,而不是被调出。它们由虚拟内存支持。但如果实际文件相对较小并且其所有页面都是热页面,那么它们很可能仅保留在内存中。

关于更大的问题,

everything works fine as long as SELinux is not enabled. But if I enable SELinux, it prevents fd's from being transferred from client to compositor. Only solution I currently know is to create temporary files in app's home dir.

默认情况下,新创建的文件继承其父目录的 SELinux 类型。您的 Wayland 客户端可能没有足够的权限来修改他们创建的文件的 SELinux 标签,但您应该能够在任何您喜欢的位置管理地创建一个目录,并使用适合您需要的标签。例如,您可以为此目的(每次启动时)创建 /dev/shm 子目录,并chcon指定具有适当的标签。如果客户端在那里创建临时文件,那么它们应该继承您选择的 SELinux 类型。

关于c - mkstemp 和硬盘压力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56995515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com