用mkstemp创建的临时文件是否同步到磁盘?
以下是我所拥有的:
mkstemp创建临时文件,并将fd发送到另一个程序。mmap-ped,并且大量使用(写入速度高达400 MB/秒,读取速度高达400 MB/秒;每秒读写速度高达60 MB)。我需要的是保证这样的文件不会对硬盘造成压力。我不能允许它被写入磁盘,即使这只发生在每5秒一次。如果我不能得到这样的保证,我会找别的办法。
补充资料(不重要):
我正在为Android设备编写wayland作曲家。目前,临时文件(实际上是wayland表面)是在tmpfs上创建的。只要没有启用SELinux,一切都能正常工作。但是,如果启用SELinux,则会防止fd从客户端传输到排序器。我目前知道的唯一解决方案是在app的home dir中创建临时文件。但是,如果这样做是危险的,我会找到另一个。
发布于 2019-07-11 20:26:52
用
mkstemp创建的临时文件是否同步到磁盘?
mkstemp函数不会向它打开的文件传递任何特殊属性,从而阻止它们被同步到磁盘。创建它们的文件系统可能具有这样的属性,但这与文件创建无关。特别是,如果不删除,通过mkstemp()创建的文件将无限期地持续。
我需要的是保证这样的文件不会对硬盘造成压力。我不能允许它被写入磁盘,即使这只发生在每5秒一次。如果我不能得到这样的保证,我会找别的办法。
据我所知,即使tmpfs文件系统也不能保证它们的内容将被锁定在内存中,而不是被分页。它们以虚拟内存为后盾。但是,如果实际文件相对较小,并且所有页面都是热的,那么它们很可能只保留在内存中。
关于更大的问题,
只要没有启用SELinux,一切都能正常工作。但是,如果启用SELinux,则会防止fd从客户端传输到排序器。我目前知道的唯一解决方案是在app的home dir中创建临时文件。
默认情况下,新创建的文件继承父目录的SELinux类型.您的Wayland客户端可能没有足够的权限来修改它们创建的文件的SELinux标签,但是您应该能够在任何地方管理地创建一个目录,其中包含一个有利于您的需要的标签。例如,您可以为此目的创建一个/dev/shm子目录(在每次启动时),而chconned则创建一个适当的标签。如果客户端在那里创建临时文件,那么他们应该继承您选择的SELinux类型。
https://stackoverflow.com/questions/56995515
复制相似问题