直接高效地读写硬盘扇区

我特别需要块数据存储。 我的数据是格式化的数据块大小为4096.为了高效率,我想直接操纵硬盘扇区上的块,而不想把数据块当作文件。 我认为一种方法是将设备视为/ dev / sda1这样的文件,并使用lseek()read()和write()来读写数据。 但是我不知道文件头是否是硬盘的第一个扇区。 我也怀疑这种方法的效率。

我正在研究Linux OS和C编程语言。

什么是处理硬盘扇区的最有效方法? 我应该写一个linux的块设备模块吗? 但是,我不太了解。 我应该使用什么内核函数来读写块设备?

Solutions Collecting From Web of "直接高效地读写硬盘扇区"

“大小为4096的块”并不是特别需要的,你还没有提到任何会破坏内核内置缓存机制的访问模式。

读取和写入数据的最有效的方法是使用文件。

 int ReadSector(int numSector,char* buf) { int retCode = 0; BYTE sector[512]; DWORD bytesRead; HANDLE device = NULL; device = CreateFile("\\\\.\\H:", // Drive to open GENERIC_READ, // Access mode FILE_SHARE_READ, // Share Mode NULL, // Security Descriptor OPEN_EXISTING, // How to create 0, // File attributes NULL); // Handle to template if(device != NULL) { // Read one sector SetFilePointer (device, numSector*512, NULL, FILE_BEGIN) ; if (!ReadFile(device, sector, 512, &bytesRead, NULL)) { Print("Error in reading1 floppy disk\n",numligne++); } else { // Copy boot sector into buffer and set retCode memcpy(buf,sector, 512);retCode=1; } CloseHandle(device); // Close the handle } return retCode; } 

这是我读取扇区的功能,写起来也是一样的。 扇区零将是分区的第一个扇区