|
|
|
Junior Member
      
участник
Last Login: 18.10.2007 21:37
Сообщ.: 24,
Visits: 235
|
|
| Здраствуйте. Меня интерисует Функция на Си чтоби записывать данные (строку, или часть отдельного файла) в отдельный сектор на флопи диске, и чтение с этого сектора. Вобщем на флоп надо записать файл(например текстовый), в различные сектора, так чтоб система его не видела. но при помощи програмы его можно было прочитать.
Програма на обычном Си. Подскажите пожалуйста Функции, для реализации задачи.
Зарание благодарен.
|
|
|
|
|
Supreme 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 } } Конец модуля не привожу, поскольку он не связан с темой. Может быть, это поможет.
|
|
|
|
|
Junior Member
      
участник
Last Login: 18.10.2007 21:37
Сообщ.: 24,
Visits: 235
|
|
| Спасибо большое. Ассемблерные вставки это хорошо, но возможно ли реализовать задачу посредставом самого Си?
|
|
|
|
|
Supreme 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
|
|
|
|
|
новичок
      
участник
Last Login: 22.10.2006 13:45
Сообщ.: 1,
Visits: 4
|
|
| А как насчет функций AbsRead AbsWrite
|
|
|
|
|
Supreme Being
      
участник
Last Login: 30.09.2008 17:18
Сообщ.: 121,
Visits: 2 334
|
|
Damirjan, можно поинтересоваться, из какой они библиотеки?
|
|
|
|