gpt4 book ai didi

c++ - 符合 unicode 且跨平台的 Unbuffer 文件写入

转载 作者:行者123 更新时间:2023-11-30 04:29:53 25 4
gpt4 key购买 nike

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

我不知道我可以为此使用什么功能。

明确地说,我正在实现一个写入回调函数和一个读取回调函数,当操作系统中的任何第 3 方应用程序想要写入或读取时,这些函数将处理写入或读取硬盘。

需要:
-我需要使用具有 unicode 名称的文件。
-我需要在无缓冲模式下写入。
-我需要为 Windows、Linux、Mac 执行此操作。

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

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

最佳答案

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

但我必须警告您,无缓冲 I/O 不会最小化磁盘 I/O,并且很可能会大大降低应用程序的性能。不要直接 I/O,除非你真的知道你在做什么,知道操作系统缓冲如何影响性能,并且清楚地解释为什么无缓冲的 I/O 会更快。如果您仍想继续,请不要忘记衡量前后的表现。进行错误优化甚至使事情变得更糟的几率为十分之九。

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

祝你好运!

关于c++ - 符合 unicode 且跨平台的 Unbuffer 文件写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049003/

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