Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 18:21   #1
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию Работа с файлами на низком уровне

Здравствуйте,

от недавнего времени заинтересовался работой с файлами. А теперь нуждаюсь в помощи. Подскажите, пожалуйста, есть ли способ копировать даже не байт, а бит данных, то есть только 1 или 0. Все что мне нужно так это побитово (в двоичном виде) разобрать файл и скопировать его. Буду очень благодарен за любую помощь.

Спасибо!
JamS007 вне форума Ответить с цитированием
Старый 26.05.2009, 18:41   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Нельзя, т.к. бит не является адресуемой единицей
pu4koff вне форума Ответить с цитированием
Старый 26.05.2009, 19:02   #3
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Как тогда ОС копирует файлы? Меня устраивает и вариант программирования на ассемблере, и на уровне драйверов к файловой сис-ме, только чтоб добится результата. Я не верю что нельзя скопировать один бит.
JamS007 вне форума Ответить с цитированием
Старый 26.05.2009, 19:12   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Как тогда ОС копирует файлы?
Вообще-то ОС работает с диском даже не побайтно, а посекторно, т.е. по 512 б.
А что мешает сделать так же и работать с одним битом?
Если вы хотите работать с диском на низком уровне, вам придется учитывать и различные ФС. Оно вам надо?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 26.05.2009 в 19:22.
Goodwin98 вне форума Ответить с цитированием
Старый 26.05.2009, 19:15   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

С винта Вы даже байт не прочтете. Можно конечно запросить байт и ОС даже вернёт этот байт, но на самом деле с винта прочтется N-байт, которые осядут в кэшах винта и ОС и следующие за этим байты возьмутся уже не с винта, а из этих самых кэшей. Потому быстрее будет копироваться, если сразу запрашивать эти самые N-байт. Вот только считываются данные секторами или кластерами я не помню. Меньше сектора прочитать точно не сможет ОСь, т.к. это минимально адресуемая ячейка памяти на винте, а кластер - это группа секторов, которые являются минимальным возможным размером для файла.
pu4koff вне форума Ответить с цитированием
Старый 26.05.2009, 19:27   #6
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Тогда есть ли способ прочитать эти самые 512 байт и их потом разбить на биты уже в самой программе?
JamS007 вне форума Ответить с цитированием
Старый 26.05.2009, 19:40   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Под ДОС и Win9x можно использовать функции int13 bios и int25, int26 DOS'a.
Под всеми виндами можно использовать обычные CreateFile с именем диска ('\\.\A:' для логического диска и '\\?\Device\Harddisk1\Partition0' для физического), а потом ReadFile, WriteFile. Они, вроде, принимают кол-во данных в байтах, поэтому можно передать и меньше 512 б. Это кстати не очень низкий уровень.
Но я до сих пор не понимаю, зачем нужно использовать низкий уровень для этого.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 26.05.2009 в 19:49.
Goodwin98 вне форума Ответить с цитированием
Старый 26.05.2009, 19:43   #8
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Ладно, объясню вкратце что сделать хочу... Придумал я алгоритм ускорения передачи данных по сети с приростом скорости от 30% до 70%... Но он базируется на побитовом режиме.

Уже по ходу, хочу еще спросить можно ли по сети передать всего 2 бита?

Пы.Сы. Друзья, дайте плиз свой номер аси, ато в форуме долго очень... плиз, доставать не буду.

Последний раз редактировалось JamS007; 26.05.2009 в 19:47.
JamS007 вне форума Ответить с цитированием
Старый 26.05.2009, 19:47   #9
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
По умолчанию

Эээ, какую сеть? Вы можете изобрести свой формат передачи данных....
В майкрософте тоже не лохи сидят...
Levsha100 вне форума Ответить с цитированием
Старый 26.05.2009, 19:50   #10
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Levsha100 Посмотреть сообщение
Эээ, какую сеть? Вы можете изобрести свой формат передачи данных....
Я над этим и работаю... а сеть можно брать любую: локалку, инет... и так далее.
JamS007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами на С++ nec117 Общие вопросы C/C++ 4 24.02.2009 23:18
Работа с файлами basss Помощь студентам 2 22.12.2008 01:07
Работа с файлами Dim@ Помощь студентам 1 26.12.2007 22:43
Работа на низком уровне Prowler Работа с сетью в Delphi 2 26.12.2006 06:29