首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mkstemp和硬盘应力

mkstemp和硬盘应力
EN

Stack Overflow用户
提问于 2019-07-11 18:43:17
回答 1查看 101关注 0票数 0

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

以下是我所拥有的:

  1. 程序使用mkstemp创建临时文件,并将fd发送到另一个程序。
  2. 这个临时文件是两个程序都使用的mmap-ped,并且大量使用(写入速度高达400 MB/秒,读取速度高达400 MB/秒;每秒读写速度高达60 MB)。
  3. 我不能使用memfd_create (目标设备可能不支持)。
  4. 让我们还假设(这几乎是真的),我不能在tmpfs上创建这个文件(就像在/tmp中那样)。

我需要的是保证这样的文件不会对硬盘造成压力。我不能允许它被写入磁盘,即使这只发生在每5秒一次。如果我不能得到这样的保证,我会找别的办法。

补充资料(不重要):

我正在为Android设备编写wayland作曲家。目前,临时文件(实际上是wayland表面)是在tmpfs上创建的。只要没有启用SELinux,一切都能正常工作。但是,如果启用SELinux,则会防止fd从客户端传输到排序器。我目前知道的唯一解决方案是在app的home dir中创建临时文件。但是,如果这样做是危险的,我会找到另一个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 20:26:52

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

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

我需要的是保证这样的文件不会对硬盘造成压力。我不能允许它被写入磁盘,即使这只发生在每5秒一次。如果我不能得到这样的保证,我会找别的办法。

据我所知,即使tmpfs文件系统也不能保证它们的内容将被锁定在内存中,而不是被分页。它们以虚拟内存为后盾。但是,如果实际文件相对较小,并且所有页面都是热的,那么它们很可能只保留在内存中。

关于更大的问题,

只要没有启用SELinux,一切都能正常工作。但是,如果启用SELinux,则会防止fd从客户端传输到排序器。我目前知道的唯一解决方案是在app的home dir中创建临时文件。

默认情况下,新创建的文件继承父目录的SELinux类型.您的Wayland客户端可能没有足够的权限来修改它们创建的文件的SELinux标签,但是您应该能够在任何地方管理地创建一个目录,其中包含一个有利于您的需要的标签。例如,您可以为此目的创建一个/dev/shm子目录(在每次启动时),而chconned则创建一个适当的标签。如果客户端在那里创建临时文件,那么他们应该继承您选择的SELinux类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56995515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档