Я записывал на диск с использованием кода C.Запись диска не работает с malloc в C
Сначала я попытался с таНос и обнаружил, что записи не работает (запись возвращается -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
Когда я говорю 'write' не работает, это означает, что retval = -1. И я проверил, что malloc не возвращает null. @ameyCU – Algorithman
имена, начинающиеся с '/ dev' в linux, являются специальными блочными устройствами. Что произойдет, если вы укажете фактический файл? – Mike