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

时间:2015-01-04 15:26:16

标签: c++ linux 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);

2 个答案:

答案 0 :(得分:0)

写完全时调用close(fd)(在while()和open(只读)之间)。

答案 1 :(得分:0)

那已经解决了!问题是文件的访问权限。

相关问题