C+中的直接文件访问+;? 在C++中没有直接写入磁盘的方法吗? 目前我正在使用: int open(fileout, O_CREATE | O_WRONLY | O_DIRECT); FILE *fh = fdopen(fileout_dev, "wb");

C+中的直接文件访问+;? 在C++中没有直接写入磁盘的方法吗? 目前我正在使用: int open(fileout, O_CREATE | O_WRONLY | O_DIRECT); FILE *fh = fdopen(fileout_dev, "wb");,c++,c,cross-platform,C++,C,Cross Platform,是否有跨平台库允许这样做 谢谢Arman。如果您正在谈论缓冲,那么您可以使用或 /*示例*/ #包括 int main() { 字符缓冲区[BUFSIZ]; 文件*pFile1,*pFile2; pFile1=fopen(“myfile.txt”,“w”); pFile2=fopen(“myfile2.txt”,“a”); setbuf(pFile1,缓冲器); fputs(“发送到缓冲流”,pFile1); fflush(pFile1); setbuf(pFile2,NULL); fputs(

是否有跨平台库允许这样做


谢谢Arman。

如果您正在谈论缓冲,那么您可以使用或

/*示例*/
#包括
int main()
{
字符缓冲区[BUFSIZ];
文件*pFile1,*pFile2;
pFile1=fopen(“myfile.txt”,“w”);
pFile2=fopen(“myfile2.txt”,“a”);
setbuf(pFile1,缓冲器);
fputs(“发送到缓冲流”,pFile1);
fflush(pFile1);
setbuf(pFile2,NULL);
fputs(“发送到未缓冲流”,pFile2);
fclose(pFile1);
fclose(pFile2);
返回0;
}
/*setvbuf示例*/
#包括
int main()
{
文件*pFile;
pFile=fopen(“myfile.txt”,“w”);
//\u IONBF禁用缓冲
setvbuf(pFile,NULL,_IONBF,0);
//这里的文件操作
fclose(pFile);
返回0;
}

如果您正在谈论缓冲,那么您可以使用或

/*示例*/
#包括
int main()
{
字符缓冲区[BUFSIZ];
文件*pFile1,*pFile2;
pFile1=fopen(“myfile.txt”,“w”);
pFile2=fopen(“myfile2.txt”,“a”);
setbuf(pFile1,缓冲器);
fputs(“发送到缓冲流”,pFile1);
fflush(pFile1);
setbuf(pFile2,NULL);
fputs(“发送到未缓冲流”,pFile2);
fclose(pFile1);
fclose(pFile2);
返回0;
}
/*setvbuf示例*/
#包括
int main()
{
文件*pFile;
pFile=fopen(“myfile.txt”,“w”);
//\u IONBF禁用缓冲
setvbuf(pFile,NULL,_IONBF,0);
//这里的文件操作
fclose(pFile);
返回0;
}

您是在询问如何在操作系统、C/C++RTL或硬盘控制器中消除缓存?我想在不缓存的情况下写入文件…我们询问您希望避免哪种缓存。有很多层次。有些可以在语言中避免,有些依赖操作系统,有些需要访问硬件。或网络服务器,如果文件驻留在那里.BTW IO通过你的
文件*fh
像你那样用
O_DIRECT
打开,也会在文件对象中缓冲-除非你像下面建议的那样取消缓冲。你是在问操作系统、C/C++RTL或硬盘控制器中的缓存失败问题吗?我想写信给你没有缓存的文件…我们询问您希望避免哪种缓存。有很多层次。有些可以在语言中避免,有些依赖操作系统,有些需要访问硬件。或者网络服务器,如果文件驻留在那里。通过您的
文件*fh
打开的
O_DIRECT
的BTW IO也会在文件对象中进行缓冲-除非您按照下面的@RC建议取消缓冲。谢谢,它与O_DIRECT相同吗?@Arman:BTW O_DIRECT不保证您没有缓存。它只是请求类Unix内核不通过此FD缓存IO。硬件本身可能在内部缓存。感谢您的解释。使用我的RAIDS6(LVM/STRIPED/With 2RAID Controllers),当我执行dd oflag=direct时,我的速度为1200MB/s,如果我的速度不低于500,我可以在复制过程中看到大文件在缓存中移动,因此为了加快IO速度,我尝试在一些direct\u IOThanks中实现im我的代码,它和O_DIRECT一样吗?@Arman:BTW O_DIRECT并不保证你没有缓存。它只是请求类Unix内核不通过此FD缓存IO。硬件本身可能在内部缓存。感谢您的解释。使用我的RAIDS6(LVM/STRIPED/With 2RAID Controllers),当我执行dd of lag=direct时,我可以获得1200MB/s的速度,如果我的速度不低于500,我可以看到在复制过程中大文件正在缓存中移动,因此为了加快IO速度,我尝试在我的代码中实现一些直接IO
/* setbuf example */
#include <stdio.h>

int main ()
{
  char buffer[BUFSIZ];
  FILE *pFile1, *pFile2;

  pFile1=fopen ("myfile.txt","w");
  pFile2=fopen ("myfile2.txt","a");

  setbuf ( pFile1 , buffer );
  fputs ("This is sent to a buffered stream",pFile1);
  fflush (pFile1);

  setbuf ( pFile2 , NULL );
  fputs ("This is sent to an unbuffered stream",pFile2);

  fclose (pFile1);
  fclose (pFile2);

  return 0;
}


/* setvbuf example */
#include <stdio.h>

int main ()
{
  FILE *pFile;

  pFile=fopen ("myfile.txt","w");

  // _IONBF disables buffering
  setvbuf (pFile , NULL , _IONBF, 0);

  // File operations here

  fclose (pFile);

  return 0;
}