我想找到低级 C/C++ API,相当于 Linux 系统中的“写入”,但没有缓冲区。有吗?

fread、fwrite 等缓冲 I/O 不是我想要的。

有帮助吗?

解决方案

的CreateFile 查找与FILE_FLAG_NO_BUFFERING选项

其他提示

HTTP://www.codeproject。 COM /文章/ 51678 /改善响应性在-Windows的与最FILE_FL

,以防止换出高速缓存的唯一方法是与FILE_FLAG_NO_BUFFERING标志来打开文件。然而,这需要磁盘I / O请求具有由扇区大小(512至4096字节),这将需要的依赖于能够请求大小不同的多数应用大重写整除尺寸。

该项目包含一个简易的包装,提供了照顾排队和调整文件大小时,关闭文件打开写作的CreateFile_NB()ReadFile_NB()WriteFile_NB()CloseHandle_NB()功能。

http://msdn.microsoft.com /en-us/library/cc644950(v=vs.85).aspx

当打开或创建与CreateFile函数的文件时,FILE_FLAG_NO_BUFFERING标志可以被指定为禁用被读取或写入的文件数据的系统高速缓存。虽然这给出了数据I / O缓冲和有必须考虑的数据对齐的要求相似的设备和完整的直接控制,在文件的情况下

POSIX write() 函数的 Win32 等效项是 写文件(). 。文档建议使用无缓冲的文件 I/O,并建议 这一页 了解更多信息。

流大约为低电平,你可以得到.. 和它们可以是缓冲的。

int setvbuf(
   FILE *stream,
   char *buffer,
   int mode,
   size_t size 
);

例如

  setvbuf(stdout, (char *)NULL, _IONBF, 0); //unbuffered stdout

这里是从VC2008帮助文档的提取物。

的setvbuf用来功能允许该程序以控制两个缓冲和为流缓冲器的大小。流必须引用,因为它是打开的未经历I / O操作打开的文件。阵列所指向的缓冲器被用作缓冲液,除非它是NULL,在这种情况下使用setvbuf用来长度尺寸/ 2 * 2个字节的自动分配的缓冲区。

在模式必须的 _IOFBF ,<强> _IOLBF 下,或 _IONBF 即可。如果模式是的 _IOFBF _IOLBF ,然后大小被用作缓冲器的大小。如果模式是_IONBF,流是缓冲和大小和缓冲区被忽略。为模式的值和它们的含义是:

<强> _IOFBF 全缓冲;也就是说,缓冲器被用作缓冲液和大小被用作缓冲器的大小。如果缓冲器为空,自动分配的缓冲区大小字节长时使用。

<强> _IOLBF 对于某些系统,这提供行缓冲。但是,对于Win32中,行为是一样的_IOFBF - 全缓冲。

<强> _IONBF 没有缓冲被使用,无论缓冲器或尺寸。

您可以使用_write MSDN页面的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top