Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> адресная арифметика жесткого диска, нужно разобратся 
:(
    Опции темы
GIK
Дата 5.1.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Всем доброго времени суток. 
Меня интересует адресная арифметика жесткого диска. Долго думал, почему в книгах по  С++ нет информации, решил освоить винду, купил книгу, но пока ничего не нашел...
Решил по эксперементировать с указателями с типом FILE.
Код

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
using namespace std;
       /*
 */
int main(int argc, char* argv[])
{ char ch;
  FILE *f[3];

  f[0]=fopen("C:\\test\\test.txt", "rb");
  if(!f[0]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[0]<<endl;
  }

  f[1]=fopen("C:\\test\\test2.txt", "rb");
  if(!f[1]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[1]<<endl; 
  }

  f[2]=fopen("C:\\test\\test3.txt", "rb");
  if(!f[2]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[2]<<endl; 
   f[2]+=1; //Попробуем увеличить адрес.
  cout<<f[2]<<endl;
  }


 cin>>ch;
         return 0;
}



Почемуто разница между адресами файлов = 24, если даже в файле инфы больше, и почему то при увеличении указателя, тоже происходит увеличение на 24. 
Хотелосб бы разобратся что и как там происходит.   



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
W4FhLF
Дата 5.1.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Арифметика жёсткого диска напрямую зависит от файловой системы, ну само собой не учитывая основополагающих понятий о хранении информации. Могу скинуть полную спецификацию FAT32(на русском), а вот по NTFS даже не знаю, что посоветовать. Ну и конечно же Глава 12 величайшей книги, библии системного программиста, "Внутреннее устройство Windows" Марк Руссинович, Девид Соломон.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
GIK
Дата 5.1.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Цитата(W4FhLF)

Могу скинуть полную спецификацию FAT32(на русском), 

Буду рад, надоже с чего то копать.


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
W4FhLF
Дата 5.1.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121





--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
BreakPointMAN
Дата 5.1.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Цитата(GIK @  5.1.2007,  19:19 Найти цитируемый пост)
Меня интересует адресная арифметика жесткого диска.

Что есть "адресная арифметика жесткого диска" в твоем понимании?  smile 
Цитата(GIK @  5.1.2007,  19:19 Найти цитируемый пост)
Долго думал, почему в книгах по  С++ нет информации

Ответ очевиден: потому что книги по C++. Каким образом язык C++ связан с жесткими дисками и файловыми системами? Язык это язык. Жесткий диск это жесткий диск. Файловая система эта файловая система.
Цитата(GIK @  5.1.2007,  19:19 Найти цитируемый пост)
решил освоить винду, купил книгу, но пока ничего не нашел...

Какую книгу, и что именно ты хочешь в ней найти?..
Цитата(GIK @  5.1.2007,  19:19 Найти цитируемый пост)
Почемуто разница между адресами файлов = 24, если даже в файле инфы больше, и почему то при увеличении указателя, тоже происходит увеличение на 24. 

Между какими адресами файлов?..  Ты понимаешь, что такое "FILE", что такое "FILE *f[3];"? Тебе не  книжка по "адресной арифметике жесткого диска" нужна, а букварь по C++, а, вернее, C... 

FILE - это структура. Ни больше ни меньше. Вот, например, как она определена в файле stdio.h среды программирования Borland C++ Builder:
Код

/* Definition of the control structure for streams
*/
typedef struct
{
        unsigned char  *curp;       /* Current active pointer     */
        unsigned char  *buffer;     /* Data transfer buffer       */
        int             level;      /* fill/empty level of buffer */
        int             bsize;      /* Buffer size                */
        unsigned short  istemp;     /* Temporary file indicator   */
        unsigned short  flags;      /* File status flags          */
        wchar_t         hold;       /* Ungetc char if no buffer   */
        char            fd;         /* File descriptor            */
        unsigned char   token;      /* Used for validity checking */
}       FILE;                       /* This is the FILE object    */

Функция fopen возвращает указатель на экземпляр этой структуры, который в дальнейшем используется функциями типа fclose, fseek, fread, fwrite, fprintf и т.д. Этот указатель ссылается на адрес в оперативной памяти, а вовсе не на какой-то там адрес на поверхности жесткого диска!..

А "FILE *f[3];" - это массив из 3 указателей на структуры типа FILE.
Что касается твоего недоумения, откуда берется число 24... это всего-навсего размер памяти в байтах, занимаемый одной такой структурой.  Можешь выполнить программу:
Код
#include <stdio.h>
#include <conio.h>

int main()
{
   printf("%d",sizeof(FILE));
   getch();
   return 0;
}

На экран будет выведено число "24".

Это сообщение отредактировал(а) BreakPointMAN - 6.1.2007, 00:03


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Dude03
Дата 6.1.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Цитата(W4FhLF @  5.1.2007,  19:41 Найти цитируемый пост)
Арифметика жёсткого диска напрямую зависит от файловой системы, ну само собой не учитывая основополагающих понятий о хранении информации. Могу скинуть полную спецификацию FAT32(на русском), а вот по NTFS даже не знаю, что посоветовать. Ну и конечно же Глава 12 величайшей книги, библии системного программиста, "Внутреннее устройство Windows" Марк Руссинович, Девид Соломон. 

Хелен Кастер "Основы Windows и NTFS" smile Советую прочитать всю
Не менее кстати легендарная... Учитывая то, что предисловие писал Девид Катлер smile . В книги конечно взгляд отличается от взгляда в книге Соломона&Руссиновича, больше сделан упор на философию(ОС smile NT 4.0), но от этого книга ничего не теряет. Короче, must read.

Это сообщение отредактировал(а) Dude03 - 6.1.2007, 00:06
PM MAIL   Вверх
BreakPointMAN
Дата 6.1.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 15.9.2004
Где: Saratov

Репутация: 14
Всего: 24



Еще недавно в издательстве BHV вышла книга "Восстановление данных" © Крис Касперски (подробности здесь):
Цитата
Книга представляет собой пошаговое руководство по восстановлению поврежденных данных на жестких и оптических дисках. Подробно рассмотрена структура популярных файловых систем: NTFS, ext2/ext3, UFS/FFS и др. Описаны автоматические методы восстановления данных для операционных систем Windows и Linux. Приведены способы ручного восстановления, используемые в случае, когда автоматическое восстановление невозможно. Материал сопровождается большим количеством полезных советов и исчерпывающим справочным материалом. На компакт-диске помещены полезные утилиты и исходные коды, приведенные в книге.

Для пользователей ПК

Думаю, что кое-какую информацию по NTFS можно почерпнуть оттуда.


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
GIK
Дата 6.1.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



BreakPointMAN, спасибо, просветил  smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
jonie
Дата 6.1.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

арифметика жесткого диска.
а по мне это как работает контролер)
Цитата

Что касается твоего недоумения, откуда берется число 24... это всего-навсего размер памяти в байтах, занимаемый одной такой структурой....
ыгы. лучше сказал бы сразу "учить парню надо арифметику с указателями..." потому как lp++ раскрывается компилятором как lp = lp +sizeof(типа на что указывает lp)

по структурам NTFS и прочего можно почитать и в кодах драйверов из nix-ов например...собсна оттуда же и все остальное можно изъять )....

Это сообщение отредактировал(а) jonie - 6.1.2007, 15:14


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
GIK
Дата 6.1.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 1
Всего: 14



Цитата(jonie)

ыгы. лучше сказал бы сразу "учить парню надо арифметику с указателями..." потому как lp++ раскрывается компилятором как lp = lp +sizeof(типа на что указывает lp)

Ну уж за полного лоха то не держите меня...
Хотя.. может я и полный лох....
Почему, у меня к примкру, адрес указателя на файл = 845 833 048, или 845 миллионов 833 тысячи 48. А оперативы у меня 512 миллионов?

Добавлено @ 20:08 
Код

                         #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
using namespace std;


int main(int argc, char* argv[])
{ char ch;
  FILE *f[3];
  f[0]=fopen("C:\\test\\test.txt", "rb");
  if(!f[0]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[0]<<endl; //vikitet adress

  };

  f[1]=fopen("C:\\test\\test2.txt", "rb");
  if(!f[1]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[1]<<endl; //vikitet adress
  }
  f[2]=fopen("C:\\test\\test3.txt", "rb");
  if(!f[2]){
  cout<<"Not File"<<endl;
  }
  else{cout<<f[2]<<endl; //vikitet adress

  }      int i=120;
  int *ppp = &i;
  printf("%d", ppp);
 cin>>ch;
         return 0;
}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
MAKCim
Дата 6.1.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Почему, у меня к примкру, адрес указателя на файл = 845 833 048, или 845 миллионов 833 тысячи 48. А оперативы у меня 512 миллионов?

У тебя виртуальный адрес во flat 32-ом адресном пространстве, который отображается на физический в пределах твоих 512Мб
подробнее


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0710 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.