Добрый день. Мне нужно разместить 96 бит данных в начале кластера ext3. 16 бит в старшие биты, затем должны идти 32 бита (которые будут интерпретироваться, как некие отдельные данные ) и 16 бит ещё под одни уникальные данные ...+32 бита(в которые буду писать какойто адресс на жестком диске). И тут вопрос, собственно как это сделать? Эти данные должны размещаться через каждые 4000 байт. Как мне кажется в таком случае 96 байт будут попадать на начало кластера в ext3 ( 4096 байт )
Думаю, этот рисунок принесёт больше ясности чем моё объяснение. Красным помечены места, куда мне нужно будет записывать данные. Они находятся в начале сектора (а в unix это называется блоком) на жёстком диске. Это делается для того, чтобы считывающие головки на харде, быстрее находили нужную информацию. серым слева помечены избыточные данные.
Мне нужно получить указатель на начало сектора..как это сделать? ..........или... я сейчас жостко туплю......?
Диск это блочное устройство, с него нельзя считать/записать несколько байт. Чтение/запись идет, как минимум, посекторно. Считывается сектор, изменяются нужные байты и сектор записыватся назад. Или ты пишешь прошивку для контроллера хард диска ?
Нет я хочу всеголишь организовать быстрый доступ и запись к своим данным =) Stariy Спасибо. И ещё один вопрос... как определить место на харде, с последовательно свободными секторами? Чтоб я к примеру сразу разметил 100 последовательно расположенных секторов и знал,что никакие данные расположенные до записи на харде, не затронуты..
Зависит от файловой системы, для фата проще, для нтфс посложней. Идея такая - читаешь бут-сектор, рассчитываешь начало фат и начало области данных. Ищешь в фате последовательность свободных кластеров нужной длины, ну и дальше ясно.
открыть раздел функцией CreateFile, затем читать функцией ReadFile первые 512 байт, там он обычно и лежит. Это если под Win2000/XP
Stariy Тоесть получается, что в начале сектора уже расположены некие данные (от файловой системы которые я не смогу затереть?)..тоесть я хотел сделать так, чтоб в секторе из 4096 байт, первые 96 байт были заняты моими служебными данными, а остальные 4000байт - любые данные которые можно записать. Такое не получится сделать?
есть сектора, есть кластера. Сектор в подавляющем большинстве случаев состоит из 512 байт (один раз за всю жизнь попадался сектор 2048 байт). Кластер состоит из секторов, бывает 2, 4, 8, 16 и т.д. секторов. А насчет частичной занятости сектора или кластера - скорее всего, не получится. Вернее, записать то можно, только ОС при записи каких-либо данных в это место затрет все.
Идея писать на диск помимо файловой системы - бредовая. Во-первых рискуешь потереть данные в файлах, а то и убить файловую систему. Во-вторых твои данные для системы - свободное место. При первом же случае на этом месте окажется какой-нибудь файл.
stellaco Интересно, каким образом добавление собственного заголовка в начало каждого кластера\страницы может ускорить доступ ? А если хочешь создать нечто вроде собственного файла подкачки, то причем тут хард\сектора\кластеры - определись со структурой файла и юзай обычные Read\WriteFile с кэшированием или без (FILE_FLAG_NO_BUFFERING)