如何将虚拟磁盘的内存设置为0

时间:2019-11-22 13:59:05

标签: c

static int fd;
int make_disk(char *name){
    int cnt;
    char buf[BLOCK_SIZE];

    fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, 0644);

    memset(buf, 0, (BLOCK_SIZE * DISK_BLOCKS));
    for(cnt = 0; cnt < BLOCK_SIZE; ++cnt){
        write(fd, buf, DISK_BLOCKS);
    }

    close(fd);
    return 0;
}

这是我的代码,我不知道为什么memset函数在这里不起作用。

2 个答案:

答案 0 :(得分:0)

  

这是我的代码,我不知道为什么memset函数在这里不起作用。

您有一个BLOCK_SIZE个字节的数组,并且您试图将该数组中的所有BLOCK_SIZE*DISK_BLOCKS个字节设置为0。我假设DISK_BLOCKS大于1,所以{{1 }}到达数组的末尾,然后继续前进,因为您告诉过它。

答案 1 :(得分:0)

也许您想要映射文件

char *map = mmap(0, BLOCK_SIZE * DISK_BLOCKS, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

然后

memset(map, 0, (BLOCK_SIZE * DISK_BLOCKS));
msync(map, (BLOCK_SIZE * DISK_BLOCKS), MS_SYNC);