Unbuffer文件写入是符合unicode和跨平台的

Unbuffer file write that is unicode compliant and cross-plat

本文关键字:unicode 跨平台 文件 Unbuffer      更新时间:2023-10-16

我正在开发一些加密应用程序,需要进行一些无缓冲的文件写入。

我不知道我能用什么功能。

需要明确的是,我正在实现一个用于写入的回调函数和一个用于读取的回调函数,当操作系统中的任何第三方应用程序想要写入或读取hdd时,这些函数将处理写入或读取

需求:
-我需要处理具有unicode名称的文件
-我需要以无缓冲模式写作
-我需要为Windows、Linux、Mac做这件事。

我使用C++和Qt。虽然QFile确实有在非缓冲模式下打开文件的语法,但文档说它不适用于Windows(也就是说,QFile在Windows中总是处于缓冲模式)。

这导致我的应用程序因Windows延迟写入错误而崩溃。理想情况下,我不想为每种类型的操作系统使用单独的函数(+lib),但我意识到,在寻求跨平台兼容性的过程中,我的选择可能不太好。无论如何,我期待着关于我应该为每个平台使用什么功能的建议,如果没有一个可以为所有3个平台使用的功能的话。

  • 对于Windows,您需要带有FILE_FLAG_NO_BUFFERING标志的CreateFile()函数
  • 在Linux上,您需要带有O_DIRECT选项的open(),但请注意,只有在2.4.10内核之后才支持它
  • 在OSX上,每次写入后都需要调用fsync()

但我必须提醒您,无缓冲的I/O并不能最大限度地减少磁盘I/O,而且很可能会大大降低应用程序的性能。除非你真的知道自己在做什么,知道操作系统缓冲区如何影响性能,并清楚地解释为什么无缓冲区的I/O会更快,否则不要进行直接I/O。如果你仍然想继续,不要忘记在之前和之后测量性能。你做错误优化,甚至让事情变得更糟的几率是90%。

至于Unicode合规性,这并不重要。写入需要一个内存地址和要写入的字节数。您可以编写unicode、ASCII、任何二进制数据等。如果使用unicode,您只需要记住不要将字符串长度与字符串大小混淆。

祝你好运!