C++ 取消缓冲符合unicode和跨平台的文件写入
我正在开发一些加密应用程序,需要进行一些无缓冲文件写入 我不知道我能用什么函数来做这个 说得清楚一点,我正在实现一个写回调函数和一个读回调函数,当操作系统中的任何第三方应用程序想要写入或读取硬盘时,它们将处理写入或读取操作。 需要:C++ 取消缓冲符合unicode和跨平台的文件写入,c++,qt,C++,Qt,我正在开发一些加密应用程序,需要进行一些无缓冲文件写入 我不知道我能用什么函数来做这个 说得清楚一点,我正在实现一个写回调函数和一个读回调函数,当操作系统中的任何第三方应用程序想要写入或读取硬盘时,它们将处理写入或读取操作。 需要: -我需要处理具有unicode名称的文件。 -我需要以无缓冲模式写入。 -我需要在Windows、Linux和Mac上这样做 我使用C++和Qt。虽然QFile确实具有在非缓冲模式下打开文件的语法,但文档说它不适用于Windows(也就是说,QFile在Window
-我需要处理具有unicode名称的文件。
-我需要以无缓冲模式写入。
-我需要在Windows、Linux和Mac上这样做 <>我使用C++和Qt。虽然QFile确实具有在非缓冲模式下打开文件的语法,但文档说它不适用于Windows(也就是说,QFile在Windows中始终处于缓冲模式) 这会导致我的应用程序因Windows延迟写入错误而崩溃。理想情况下,我不想为每种类型的操作系统使用单独的函数(+lib),但我意识到,在寻求跨平台兼容性时,我的选项可能不是很好。无论如何,如果没有一个平台可以为所有3个平台提供这些功能,我期待着就每个平台应该使用哪些功能提出建议
- 对于Windows,您需要具有
FILE\u FLAG\u NO\u缓冲的函数
- 在Linux上,您需要使用带有
选项的O_DIRECT
,但请注意,它仅从2.4.10内核开始受支持open()
- 在OSX上,您需要在每次写入后调用
祝你好运 你说的无缓冲是什么意思?用户空间中没有缓冲区?操作系统没有缓冲?HDD没有缓冲?所谓无缓冲,我的意思是写操作应该尽快进行,而不需要将写请求集中到缓冲区中,以期最大限度地减少I/o。当我调用write时,我需要它真正地写入硬盘。因此,在这方面,我想跳过所有可以跳过的缓冲区。也许我不能跳过硬盘的问题,但那可能没问题。我不希望操作系统延迟写入。谢谢弗拉德。我会试试你的建议。我很快地发表了一些评论。关于unicode,我知道我写什么并不重要,当我说unicode兼容时,我的意思是我打开的文件的名称有一个unicode名称。因此,如果open函数不支持unicode字符,它将无法打开该文件(获取该文件的句柄),以便我可以对其进行写入。例如,fstream::open()无法打开具有unicode文件名的文件。这就是你为Linux建议的“open()”吗?@user440297:不,你说的是包装器。我对他们不是很熟悉
open()
是POSIX系统调用。无论您使用什么,它都会在一天结束时调用open()
,以打开一个文件。是否支持Unicode,也取决于文件系统驱动程序。例如,OSXHFS支持它,但仍有其局限性。在Linux中,unicode在整个开箱即用系统中都受支持,无需编写任何特殊代码,因此您根本不必担心它。然而,Windows是一个例外。有CreateFile
函数,它有两个等价项