我正在使用一个可以从文件中读取或写入一些我需要的元数据的库。
我只需要阅读,我知道我的文件存储速度很慢。
我注意到虽然读取我需要的值非常快,但关闭文件却很慢。基本上,如果我open(); read(); close()
每个文件我的程序都很慢,但如果我只open(); read()
在操作期间和close()
退出之前(即我让我的运行时在泄漏对象的最终确定期间关闭文件)程序运行得很快,但会停止几秒钟就在退出之前 - 当文件被关闭时。
另一方面,如果我从文件中删除写权限,这不会发生:似乎以只读方式打开的文件比以读写方式打开的文件关闭得快得多。如果文件是可写的,或者其他原因,库可能会在关闭时写入元数据“只是为了确定”,但无论如何 - 无法为库指定我不想打开文件仅用于阅读:它试图变得智能并根据文件权限做出决定。
目前为了加快速度,我正在打开文件之前更改文件权限,并在读取元数据后恢复权限。它有效,但感觉不对。
linux / unix 有没有办法让文件暂时对当前进程显示为只读?我不能使用 setuid(2) 因为程序是由非特权用户运行的(或者我错了吗?)。
细节
该库是taglib-ruby,它又是taglib的 C++ API 的包装器。
该程序可能会列出设备上的曲目,并且需要以秒为单位知道它们的长度(我使用 taglib 的原因),但是将写入相同的媒体(上传新曲目,删除一些曲目)因此我不能只强迫用户以只读方式安装设备。
我意识到更好的解决方案是修补 taglib 以允许指定我只想读取元数据,然后修补 taglib-ruby 以包装新的 API。但我无法做到这一点,而且我已经有一个解决方法,因此沿着这条路线走下去并没有太大的积极性。我只是想知道是否有更好的解决方法。