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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие 2 компьютеров, организовать одинаковые каталоги на 2 ко 
:(
    Опции темы
seravr
Дата 3.3.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я подумал, и решил, что в случае, когда изменяются 2 одинаковых файла, делать общую копию по последнему изминению( и не важно кто и что там наисправлял)

Друзья, кто нибудь может помочь разобраться с хешированием и diff?
PM MAIL   Вверх
ir4y
Дата 3.3.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



(оффтоп) 
Я конечно понимаю желание разобраться с программированием и стать реально крутым меном у seravr'а
но пытаться воротить какие то адские программы типа сетевой синхронизации винтов это полный бред(извиняюсь за жесткость высказывания)
raid0, а тут именно что то подобное человек сделать пытается, по сети в 100Мб не синхронизуешь нормально....
если конечно у него не 10Гб оптика между компами проложена.....

практически половина сообщений в теме полный оффтоп, в связи с некомпитентностью топикстартера =(

(не оффтоп)
при таком подходе
Цитата

делать общую копию по последнему именению

в файле будет каша так как пользователь не знает как на самом деле выглядит файл.
например первый пользователь изменил строку а второй ее просто удалил
информация первого пользователя потерена ....

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

по поводу diff
качаешь
http://gnuwin32.sourceforge.net/packages/diffutils.htm
устанавливаешь

в программе своей exec'аешь diff 
через api или перенаправление в файл получаешь вывод программы....

если хочешь оптимизировать качаешь исходники и вкручиваешь необходимые функции в свой код

аналогично с хэшированием
для примера можешь взять md5 но он тяжеловесный лучше что-нибудь по проще ....
находишь исходники либо по rfc пишешь сам
и считаешь хэш сумму файла если совпала со старой файл не менялся
если изменилось то запускашь diff и определяешь что именно и как ....


Это сообщение отредактировал(а) ir4y - 3.3.2009, 10:39
PM MAIL   Вверх
seravr
Дата 3.3.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ir4y, спасибо Огромное, пойду разбираться
PM MAIL   Вверх
Vaulter
Дата 3.3.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 22



Цитата

rsync — (англ. Remote Synchronization) это программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.

Алгоритм

Утилита rsync использует алгоритм, разработанный австралийским программистом Эндрю Триджеллом, для эффективной передачи структур (например файлов) по коммуникационным соединениям в том случае, когда принимающий компьютер уже имеет отличающуюся версию этой структуры.

Принимающий компьютер разделяет свою копию файла на неперекрывающиеся куски фиксированного размера S, и вычисляет контрольную сумму для каждого куска: MD4 хэш и более слабый 'rolling checksum', и отправляет их серверу, с которым синхронизируется.

Сервер, с которым синхронизируются, вычисляет контрольные суммы для каждого кусочка размера S в своей версии файла, в том числе перекрывающиеся куски. Это может быть эффективно подсчитано ввиду особого свойства rolling checksum: если rolling checksum байт от n до n+S-1 равняется R, то rolling checksum байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала. Таким образом, если уже подсчитана rolling checksum байт 1-25, то для подсчета rolling checksum байт 2-26 используется предыдущая контрольная сумма и байты 1 и 26.


http://ru.wikipedia.org/wiki/Rsync

Open source:

http://samba.anu.edu.au/ftp/unpacked/rsync/
http://samba.anu.edu.au/ftp/rsync/




--------------------
PM MAIL WWW ICQ   Вверх
seravr
Дата 3.3.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vaulter, спасибо!!!

ir4y, спасибо, разобрался с md5

Как Вы думаете, вот "просканировал" я каталог, который хочу "зеркалировать", для каждого файла получил хеш, но ведь этим только  я смогу отслеживать изминения внутренней как бы структуры файла, но ведь этого недостаточно, в принципе можно для каждого файла записывать структуру _finddata_t, но размер этой структуры 296 байт(хотя странно, если посмотреть в io.h, то там взглянуть на структуру _findata_t, то на самом деле объет этого типа должен занимать 292 байта, почему у меня sizeof(обект типа _findata_t) занимает 296 байт, вообщем странно, может "дыры" сказываются или указатель там еще есть, вообщем-непонятно ), т.е. вообщем, для любого файла(причем, не важно какой это файл, я имею ввиду размер, то ли он будет равен 1 байту или 100 мб- для каждого из них информация будет весить = sizeof(_findata_t) +хеш ) .
Вобщем, как Вы думаете, что оптимально хранить в информации о конкретном файле, как Вы считаете?

вот пример из описания структуры _findata_t(у меня 32 разрядная система, и вижал студия применяет именно вот эту структуру)
Код


struct _finddata64i32_t {
        unsigned    attrib;
        __time64_t  time_create;    /* -1 for FAT file systems */
        __time64_t  time_access;    /* -1 for FAT file systems */
        __time64_t  time_write;
        _fsize_t    size;
        char        name[260];
};

PM MAIL   Вверх
seravr
Дата 6.3.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Друзья, выскажитесь пожалуйста кто как думает по поводу вышесказанного мною
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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