我创建了一个Linux软件RAID,块大小为4096B,还有4个磁盘。 然后,我正在尝试对RAID进行写入和读取测试,比如/ dev / md0。
以下代码是读取测试,BLOCK_SIZE是我想要读取的数量。但是,每当我设置它不是2的幂时,例如3 * 4096,我会在读完后得到一个错误,说“无效的参数”。写作就是一样的情况。
据我所知,read(2)和write(2)应该能够对用户想要的任何字节数执行操作,所以请帮我解决它和代码。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#define BLOCK_SIZE 8*4096 //bytes
#define BUFF_OFFSET 8*4096
int main(int argc, char *argv[]){
char device[64];
int fd;
void *buff;
int size; //bytes
int seek;
fd = open(argv[1], O_DIRECT | O_RSYNC | O_RDONLY);
posix_memalign(&buff, BUFF_OFFSET, BLOCK_SIZE);
int load;
seek = lseek(fd,0,SEEK_SET);
load = read(fd,buff,BLOCK_SIZE);
if (load < 0){
printf("Cannot read\n");
perror("because");
break;
}
else{
printf("%d\n",load);
}
close(fd);
return 0;
}