Linux read systemcall不从文件中读取 我有一个C++程序,它打开一个带有OAI直接标志的文件,并用写系统调用将一个大小为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); }
此代码成功地将数据写入文件,但在下面的代码读取系统调用中,无法从文件中读取任何数据并返回-1Linux read systemcall不从文件中读取 我有一个C++程序,它打开一个带有OAI直接标志的文件,并用写系统调用将一个大小为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); },c++,linux,file,C++,Linux,File,此代码成功地将数据写入文件,但在下面的代码读取系统调用中,无法从文件中读取任何数据并返回-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); 写入完成(介于w
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()和open(只读)之间)时调用close(fd)。问题解决了!问题是文件的访问权限。read()返回-1错误号是什么?您是否检查了
open()
是否成功?如果没有,返回代码是什么?read()
调用返回-1后,errno
的值是多少?len
从未初始化。@philant,-1表示从文件描述符读取时中断。如果read()
返回-1
,请尝试打印:std::cout