Запись в сектора
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Запись в сектора Expand / Collapse
Автор
Сообщение
19.10.2006 17:52
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 18.10.2007 21:37
Сообщ.: 24, Visits: 235
Здраствуйте.

Меня интерисует Функция на Си чтоби записывать данные (строку, или часть отдельного файла) в отдельный сектор на флопи диске, и чтение с этого сектора.


Вобщем на флоп надо записать файл(например текстовый), в различные сектора, так чтоб система его не видела. но при помощи програмы его можно было прочитать.

Програма на обычном Си.


Подскажите пожалуйста Функции, для реализации задачи.

Зарание благодарен.

Сообщ. #906019
19.10.2006 20:47
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577, Visits: 17 092
Не знаю, можно ли это сделать под Windows. Но на DOS когда-то делал. Вот начало моего модуля для Turbo C

#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#ifndef __LARGE__
#error LARGE model needed
#endif
#define BUFSIZE 512*18
unsigned char buf[BUFSIZE];
unsigned char disk=0;
int hf;
#pragma inline
typedef unsigned char byte;
int ReadAbsDisk(int disk, int cyl, int head, int sec, int num, byte *buf) {
 int r=0;
 asm {
  MOV  DL,byte ptr disk
  MOV  DH,byte ptr head
  MOV  CL,byte ptr sec
  AND  CL,00111111b
  MOV  AX,cyl
  MOV  CH,AL
  AND  AX,0000001100000000b
  SHR  AX,1
  SHR  AX,1
  OR   CL,AL
  LES  BX,buf
  MOV  AL,byte ptr num
  MOV  AH,2;
  INT  19
  MOV  byte ptr r,AH
 }
 return r;
}
int WriteAbsDisk(int disk, int cyl, int head, int sec, int num, byte *buf) {
 int r=0;
 asm {
  MOV  DL,byte ptr disk
  MOV  DH,byte ptr head
  MOV  CL,byte ptr sec
  AND  CL,00111111b
  MOV  AX,cyl
  MOV  CH,AL
  AND  AX,0000001100000000b
  SHR  AX,1
  SHR  AX,1
  OR   CL,AL
  LES  BX,buf
  MOV  AL,byte ptr num
  MOV  AH,3;
  INT  19
  MOV  byte ptr r,AH
 }
 return r;
}
void ResetDisk(int disk) {
 asm {
  MOV  DL,byte ptr disk
  MOV  AH,0;
  INT  19
 }
}

Конец модуля не привожу, поскольку он не связан с темой. Может быть, это поможет.

Сообщ. #906022
19.10.2006 21:34
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 18.10.2007 21:37
Сообщ.: 24, Visits: 235
Спасибо большое.

Ассемблерные вставки это хорошо, но возможно ли реализовать задачу посредставом самого Си?

Сообщ. #906026
19.10.2006 23:52


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.09.2008 17:18
Сообщ.: 121, Visits: 2 334
Привет

Что значит "самого Си"? В Си нельзя, можно средствами WinAPI.
Это самое 13h прерывание выполняется через функцию DeviceIoControl, с параметром VWIN32_DIOC_DOS_INT13(=4), но только в Windows 95/98.

Под NT используется метод блочного чтения.
почитать можно здесь http://www.insidepro.com/kk/020/020r.shtml

Сообщ. #906031
22.10.2006 13:52
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 22.10.2006 13:45
Сообщ.: 1, Visits: 4
А как насчет функций AbsRead AbsWrite
Сообщ. #906189
23.10.2006 15:00


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.09.2008 17:18
Сообщ.: 121, Visits: 2 334
Damirjan,
можно поинтересоваться, из какой они библиотеки?
Сообщ. #906282
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 5:39