Linux 读取系统调用不从文件读取

Linux read systemcall does not read from file

本文关键字:读取 文件 系统调用 Linux      更新时间:2023-10-16

我有一个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)。

这就解决了!问题是文件的访问权限。