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 函数在这里不起作用。
这是我的代码,我不知道为什么 memset 函数在这里不起作用。
您有一个BLOCK_SIZE
字节的数组,并且您正在尝试将该数组中的所有BLOCK_SIZE*DISK_BLOCKS
个字节设置为 0。我假设DISK_BLOCKS
大于 1,所以memset
到达数组的末尾,然后继续前进,因为你告诉它这样做。
也许你想要 mmaped 文件
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);