Linux 读取系统调用不从文件读取
Linux read systemcall does not read from file
我有一个C++程序,它打开一个带有O_DIRECT标志的文件,并使用写入系统调用将大小为 100 Mb 的缓冲区写入文件。该程序定义一个等于 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);
}
此代码成功将数据写入文件,但在下面的代码中读取系统调用无法从文件中读取任何数据并返回 -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);
当你写完整(在 while () 和打开(只读)之间)时调用 close(fd)。
这就解决了!问题是文件的访问权限。
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中