Этот код
#include <stdio.h>
#define SECTORSIZE 512 // bytes per sector
int main(int argc, char *argv[])
{
FILE *fp; // filepointer
size_t rdcnt; // num. read bytes
unsigned char buffer[SECTORSIZE];
if(argc < 2)
{
fprintf(stderr, "usage:\n\t%s device\n", argv[0]);
return 1;
}
fp = fopen(argv[1], "rb");
if(fp == NULL)
{
fprintf(stderr, "unable to open %s\n",argv[1]);
return 1;
}
rdcnt = fread(buffer, 1, SECTORSIZE, fp);
if(rdcnt != SECTORSIZE)
{
fprintf(stderr, "reading %s failed\n", argv[1]);
fclose(fp);
return 1;
}
fwrite(buffer, 1, SECTORSIZE, stdout);
fclose(fp);
return 0;
}
любезно взят отсюда https://redeaglesblog.wordpress.com/2011/04/05/sektoren-eines-datentragers-lesen/
считывает загрузочный сектор с любого данного диска
Вставляется в том виде, в каком он находится в выбранном вами C (ANSI) IDE или редактор, он компилируется и работает либо в Windows (передача mingw \. \ PhysicalDriveX), либо в linux (передача gcc / dev / sdX)
Но он работает ТОЛЬКО в Linux, хотя в любом случае вставляет/ добавляет x0D, предшествующий любому x0A, несмотря на fp = fopen(argv[1], "rb");
Я скомпилировал его из code :: blocks с mingw как readsect.exe
и запустил, читая загрузочный сектор моего жесткого диска
c:\readsect.exe \\.\PhysicalDrive0 > read.bin
Файл read.bin имеет длину 515 байт вместо 512.
С помощью редактора HEX, способного открывать физические диски, я сравнил содержимое моего загрузочного сектора с файлом read.bin.
Ну, каждый x0A в физическом загрузочном секторе (x0A найден 3 раза) в файле read.bin сбрасывается как x0D + X0A.Итак, у меня есть три x0D, на три байта больше.
Googleing, похоже, это широко распространенная проблема.
Кто-нибудь из вас нашел исправление?Может быть, stdio.h нужно исправить для Windows?
Спасибо