使用read(2)直接读取RAID设备

时间:2015-05-25 18:47:49

标签: c linux kernel

我创建了一个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;
}

0 个答案:

没有答案