Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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); }_C++_Linux_File - Fatal编程技术网

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); }

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); },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

此代码成功地将数据写入文件,但在下面的代码读取系统调用中,无法从文件中读取任何数据并返回-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()和open(只读)之间)时调用close(fd)。

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

read()返回-1错误号是什么?您是否检查了
open()
是否成功?如果没有,返回代码是什么?
read()
调用返回-1后,
errno
的值是多少?
len
从未初始化。@philant,-1表示从文件描述符读取时中断。如果
read()
返回
-1
,请尝试打印:
std::cout