我用C代码写入磁盘。磁盘写入不能在malloc中使用C
首先,我试着用malloc和发现写不工作(写返回-1):
fd = open('/dev/sdb', O_DIRECT | O_SYNC | O_RDWR);
void *buff = malloc(512);
lseek(fd, 0, SEEK_SET);
write(fd, buff, 512);
然后,我这改变了第二行和它的工作:
void *buff;
posix_memalign(&buff,512,512);
然而,当我将lseek偏移量更改为1:lseek(fd, 1, SEEK_SET);
时,写入不再工作。
首先,为什么没有malloc工作?
然后,我知道在我的情况下,posix_memalign保证内存对齐的开始地址必须是512的倍数。但是,内存对齐和写入不应该是一个单独的过程吗?那么为什么我不能写任何我想要的偏移?
您是否检查过'malloc','write'的返回? – ameyCU
当我说'写'不起作用时,这意味着retval = -1。我已经检查过malloc没有返回null。 @ameyCU – Algorithman
在linux中以'/ dev'开头的名字是特殊的块设备。如果你指定一个实际的文件,会发生什么? – Mike