Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
None_13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 24
#1

Запись в сектора на floppy-диске, и чтение с этих секторов - C++

19.10.2006, 21:52. Просмотров 2808. Ответов 5
Метки нет (Все метки)

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

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

Подскажите пожалуйста Функции, для реализации задачи.
Зарание благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2006, 21:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись в сектора на floppy-диске, и чтение с этих секторов (C++):

Чтение секторов жёсткого в DOS - C++
Добрый вечер! Проблема заключается именно в том, что программа должна работать под DOS, и ей не важно что есть на диске и какая там...

[Файлы] Запись-чтение-запись. Почему не прокатывает? - C++
Сначала записываю в файл "а" запись "makulatura", потом читаю ее в строку h. Все ок. Но потом когда открываю файл "a" опять для записи с...

Поменять местами элементы верхнего сектора матрицы с элементами правого сектора второй матрицы и наоборот - C++
В двух квадратных матрицах выделено четыре сектора, которые ограничены диагоналями: верхний, нижний, левый и правый. Поменять местами...

Чтение секторов на диске - C++ WinAPI
Подскажите, как в приложении Win32 прочитать на дискете сектор с заданным цилидром головкой и поверхностью. Не через CreateFile! ...

Ошибки о Floppy диске - Windows XP
Когда я вырубаю комп постоянно вибивает ошибки что возможно открыиа дверца и т.п. хотя у меня нету флопи диска, можно как то вообще удалить...

Нестабильные сектора, неисправимые ошибки секторов и странное поведение харда - Жесткие диски
Необходим совет по SMART-значениям, которые я получил после проверки своего харда. Имеет смысл делать ремап или легче просто заменить...

5
palva
2628 / 1855 / 268
Регистрация: 08.06.2007
Сообщений: 7,088
Записей в блоге: 4
20.10.2006, 00:47 #2
Не знаю, можно ли это сделать под Windows. Но на DOS когда-то делал. Вот начало моего модуля для Turbo C
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sysstat.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
 }
}
Конец модуля не привожу, поскольку он не связан с темой. Может быть, это поможет.
0
None_13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 24
20.10.2006, 01:34  [ТС] #3
Спасибо большое.
Ассемблерные вставки это хорошо, но возможно ли реализовать задачу посредставом самого Си?
0
John Paramol
Сообщений: n/a
20.10.2006, 03:52 #4
Привет
Что значит "самого Си"? В Си нельзя, можно средствами WinAPI.
Это самое 13h прерывание выполняется через функцию DeviceIoControl, с параметром VWIN32_DIOC_DOS_INT13(=4), но только в Windows 95/98.
Под NT используется метод блочного чтения.
почитать можно здесь http://www.insidepro.com/kk/020/020r.shtml http://www.insidepro.com/kk/020/020r.shtml
Damirjan
Сообщений: n/a
22.10.2006, 17:52 #5
А как насчет функций AbsRead AbsWrite
John Paramol
Сообщений: n/a
23.10.2006, 19:00 #6
Damirjan,
можно поинтересоваться, из какой они библиотеки?
23.10.2006, 19:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2006, 19:00
Привет! Вот еще темы с ответами:

Запись и чтение большого файла или области на диске - Java
доброе время суток. если вопрос не по топику то подскажите где могут на него ответить. итак, представьте. что есть миллион...

Разбить изображения на 20 ровных сектора и подсчитать количество черных пикселов в каждом из найденых секторов - C++ Builder
Здравствуйте. Задача заключается в следующем. Нужно разбить изображение на 20 равных частей (на картинках показано как нужно разбить). В...

Перезапись секторов на диске - Жесткие диски
Всем известен принцип работы программ для восстановления файлов, удаленных с компьютера. Сектора, где они хранились, помечаются пустыми, но...

Определить количество секторов на диске - C++ WinAPI
Здравствуйте! Требуется посекторно читать диск (флешку). Проблема с определением количества секторов. Попытка воспользоваться...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru