gpt4 book ai didi

c++ - Linux read 系统调用不从文件中读取

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:11 24 4
gpt4 key购买 nike

我有一个 C++ 程序,它打开一个带有 O_DIRECT 标志的文件,并使用 write 系统调用将大小为 100 Mb 的缓冲区写入文件。该程序定义了一个 block 大小等于512,并执行以下操作:

const int BLKSZ = 512;
const int MAXBUFSIZE = 100000000;

char buf[MAXBUFSIZE];// store data in this buffer and write it to file

size_t len;// number of bytes of buf is full

int fd = open(fName.c_str(), O_WRONLY | O_CREAT | O_APPEND | O_DIRECT , mode);

#ifdef DIRECTIO
This->remNAligNum = len % BLKSZ;
if(This->remNAligNum)
{
This->remNAlig = ((char *)buf + len);
len -= This->remNAligNum;
}
else
This->remNAlig = NULL;

#endif

char *buffOffset = (char *)buf;
int buffRem = len;
wr = 0;
while(1){
buffOffset += wr;
buffRem -= wr;
if(!buffRem)
break;
wr = write(fd, buffOffset, buffRem));
usleep(5);
}

此代码成功将数据写入文件,但在下面的代码中,read 系统调用无法从文件中读取任何数据并返回 -1。

const int BLKSZ = 512;
const int MAXBUFSIZE = 100000000;

char buf[MAXBUFSIZE];
char tmpbuf[BLKSZ];

int fd = open(fName.c_str(), O_RDONLY | O_DIRECT, mode);
int ret2 = read(fd, tmpbuf, BLKSZ);

最佳答案

当你写complete时调用close(fd)(在while()和open(只读)之间)。

关于c++ - Linux read 系统调用不从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767045/

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