我用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