Как получить прямой доступ к необработанным данным HD в C? - PullRequest
4 голосов
/ 17 декабря 2011

Мне нужно сделать полный формат на USB-накопителе (FAT16 или FAT32), поместить файл на диск, затем удалить его и восстановить файл с помощью программы на языке C.

Может ли кто-нибудь дать мне подсказку о том, что я должен использовать для достижения этой цели?

Я понимаю макеты файловых систем FAT16 / 32, проблема в том, что я не знаю, как получить доступ к необработанным данным HD с помощью C (поскольку я не могу использовать такие вещи, как fopen или mmap, потому что файл не там больше).

Ответы [ 2 ]

8 голосов
/ 17 декабря 2011

Это сильно зависит от операционной системы.

В Linux вы можете открыть необработанное устройство /dev/sdxx.Обратите внимание, что есть права доступа для управления.

Для Windows вы должны использовать что-то вроде:

 HANDLE h = CreateFile ("\\\\.\\PhysicalDriveX", GENERIC_READ,
                    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
                    OPEN_EXISTING,
                    FILE_FLAG_NO_BUFFERING | FILE_FLAG_RANDOM_ACCESS,
                    NULL);

, где X зависит от устройства.

2 голосов
/ 17 декабря 2011

Просто используйте обычные операции с файловой системой на диске.

Это означает, что вам, конечно, необходимо сначала идентифицировать устройство диска. Но однажды открыв, вы можете даже mmap() это.

...