Есть файловые системы, которые хранят только уникальные файлы?
например, система должна спрашиватькак ты это себе представляешь?
1. Свойство файла, что делать по умолчанию
2. Аналогичная установка на уровне системы
3. Работа с такими отзеркаленными файлами как с единым целым (то есть например при запросе на открытие файла нужно указывать, открываешь ты его весь, или только конкретную копию)

Файловые системы с хардлинками представляют все возможности для такой схемы работы, но их схема работы в современных файловых системах обычно не такая.
пример - загружаемые на этот форум файлы...
А какой у него вариант поведения?
То есть если повторно закачивается что-то, ссылка будет дана на уже существующий файл?
да.... Никогда не замечал, что иногда загрузка файла происходит долго? Я так понимаю, если встречаются одинаковые по размеру файлы, то он проверяет на совпадения.
врядли всё так тупо - наверняка md5 в базе хранится для каждого файлика.
по сто тонн уев за терабайт

Меня пока интересуют только программные решения.
у тебя задача то какая изначально?
Например, часто попадаются расчетные проекты, когда просто делают несколько копий проекта, варьируют в каждой параметры, а потом компилируют и считают. В результате может получиться, что в папках только процентов 30 файлов(по размеру) различаются - остальные одинаковые. Понятно, что это можно решать на уровне организации таких проектов, написанием скриптов и тп, но если есть готовое решение - почему бы его не использовать?..
Еще пример - сохраняешь несколько страниц с одного (и даже необязательно с одного) сайта - получаешь кучу общих мелких картинок, css и тп.
В дистрибах тоже бывают файлы, одинаковые для кучи дистрибов (наверное которые получены с помощью одной проги-инсталлятора).
Даже задачу множественной категоризации можно решать на файловой системе при условии, что такая фишка работает

Так как насчет подробностей про cvs?
ну.. мб. и так, но по субъективной оценке,при совпадении страница выдаётся очень долго. Скорее всего сначала идет сравнение по размеру и мд5-сумме, а потом уже - побайтно.
ап

меня ломало писать что-то хорошее, потому написал быстро

просто не расчитывалось, что там будет лежать 100,000 файлов....
---
...Я работаю антинаучным аферистом...
Подробности нужны?
---
...Я работаю антинаучным аферистом...

Или не все так печально?
Опять же та же нтфс - тоже БД - мб можно ее малой кровью доработать?

Нужны.

может конечно это сетка, но аплоадится порой очень долго.
Ты под винду хочешь?
Райзеровцы делают что-то похожее на то, что тебе надо.
По крайней мере, несколько лет назад заявляли об этом.
Вернее, оно могло бы быть тебе полезным.
---
...Я работаю...

Появится два имени у файла --- расхождение, надо отлавливать check-in,
ссылками всё равно не воспользуешься, поэтому всё равно будут храниться одинаковые файлы.
Либо отлавливать и check-out.
То есть, всё равно писать хранилище, только поверх CVS.
---
...Я работаю...
Народ обычно работает по схеме make -> текстовый процессор -> расчёт -> архиватор.
---
...Я работаю...
Что такое "ТС"?Тотал командир
Ты под винду хочешь?
Не обязательно.
Я давно посматриваю в сторону никсов (точнее в сторону от вина а если еще такой повод будет - вообще круто

Райзеровцы
Это кто такие?
ссылками всё равно не воспользуешься, поэтому всё равно будут храниться одинаковые файлы.
Почему?
Он всегда после чекаута создает новую копию файла, независимо от изменений?
http://www.freebsd.org/cgi/man.cgi?query=mount_unionfs&a...
Сам никогда не пользовал, но по отзывам глючит достаточно часто. Так что можешь попробовать, составишь свое личное мнение.
Народ обычно работает по схеме make -> текстовый процессор -> расчёт -> архиватор.
Ну да, а архивы потом выбрасывать можно, так как они как правило никогда использоваться не будут (по разным причинам)


А глючит критично или по-мелочи?
Значит пользоваться можно.
Под виндой всё будет значительно сложнее.
Тебе же требуется загнать то, что ты хочешь, поближе к системе (желательно, вовсе в систему).
ReiserFS --- это http://www.namesys.com/
unionfs --- это тоже похоже на то, что ты хочешь.
---
...Я работаю...
Кстати, на тему глюков. Высока вероятность, что скоро unionfs будет совсем новая - http://people.freebsd.org/~daichi/unionfs/
Но со ссылками у CVS были какие-то проблемы.
---
...Я работаю...
---
...Я работаю...
Я не понимаю как unionfs поможет с сабжем.
Имеется некоторый глобальный исходник. Дальше каждый его себе монтирует и правит. Причем, то что один что-то поправит у себя никак не повлияет на окружающих.
Вроде автор именно этого и добивается.
На такое описание похоже. Но на сабж непохоже. Может я тред невнимательно читал и в нём проясняется что к чему.
Имеется некоторый глобальный исходник. Дальше каждый его себе монтирует и правит. Причем, то что один что-то поправит у себя никак не повлияет на окружающих.
А в чем фишка?
Разве нельзя просто взять каждому по копии?
Или потом сливание будет осуществляться?
Тогда чем это отличается от версионного хранения?
---
...Я работаю антинаучным аферистом...
Или потом сливание будет осуществляться?
Нет. То что было в основе, оно и останется. А те файлики, что каждый себе менял, будут измененными у них и храниться.

Тебе нужна любая файловая система, поддерживающая линки (желательно символические) + скрипт, который из crona периодически запускается, ходит по файловой системе и отслеживает уникальность файлов (+их открытость в данный момент) и херит копии (для не открытых в данный момент устанавливая на их место линки.
желательно символическиеПочему именно их? А еще какие бывают? (Я знаю еще только хардлинки)
Вообще из твоего описания не понятно, как будет реализована вторая часть этой схемы - когда отслеживается необходимость разнесения одного файла по двум...
---
...Я работаю антинаучным аферистом...
Почему именно их? А еще какие бывают? (Я знаю еще только хардлинки)
Софтлинки гибче, позволяют делать такую шнягу на нескольких файловых системах. Но можешь и хардлинки заюзать. Других линков я не знаю (разве что URI, но это уже из другой оперы).
Почему предлагаю делать скриптом из крона -- в рантайме у тебе не начнёт тормозить write или close, или куда там можно повесить процедуру поиска дубликата.
Вообще из твоего описания не понятно, как будет реализована вторая часть этой схемы - когда отслеживается необходимость разнесения одного файла по двум...
Чего непонятного? Библиотечный вызов open пропатчить и вот тебе счастье

Не прокатит, и сразу очевидно, почему.
Напиши почему, чтобы очевидно стало и мне.



А, понял, я там смайлик в нужном месте не поставил, сейчас поставлю

Если решу, что это то, что мне надо - почему бы и нет...
---
...Я работаю антинаучным аферистом...
Очень странно слышать такое от линуксоида.
---
...Я работаю антинаучным аферистом...
А как надо?
---
...Я работаю антинаучным аферистом...
А то это мне ни о чем не говорит

Кто-то писал про программирование под Линукс на ассемблере.
---
...Я работаю антинаучным аферистом...
Вообще-то open(2) --- это ядерный вызовА поподробнее? Или где почитать?
А то это мне ни о чем не говорит
тебя обманывает

Он не читал POSIX. Там ясно написано, что open -- функция. А ни одного стандарта на системные вызовы нет.
В MINIX (POSIX-совместим начиная с некоторой версии например вообще нет системного вызова, выполняющего операцию открытия файла. Там есть три системных вызова "send" (послать сообщение "recv" (принять сообщение "send_recv" (послать сообщение и принять ответ -- чисто оптимизация, достаточно первых двух). А функция open формирует специальное сообщение и посылает его по определённому адресу -- менеджеру файловой системы.
В linux'е реализовано по другому, open является также библиотечной функцией, но просто обёртывающий соответствующий системный вызов.
Системный вызов -- программная точка входа в защищённый (аппаратным образом в современных процессорах) код ядра (выполняющийся в привилегированном кольце защиты) для выполнения операций, не доступных в непривилегированном кольце защиты, но необходимых запускающимся там приложениям. Может выполняться (на IA32, AMD-64) вызовом программного прерывания (инструкция int) или (последние процессоры) выполнением инструкции sysenter. Переписывать системный вызов -- означает переписывать (в случае open'а) файловую систему. И означает программирование в привилегированном кольце защиты, что является занятием не для слабонервных. Пропатчить библиотечную функцию open более простая задача.
open --- это очень небиблиотечный вызов.
Вообще-то open(2) --- это ядерный вызов.Читать POSIX до просветления

Что произойдёт, если сделать open(file,O_WRONLY) и туда написать?
можно сделать те самые расширенные атрибуты, в которые написать, как ты хочешь, атрибут "copy-on-write" или ещё чего. Можно и без расширенных атрибутов -- в любом случае у тебя будет структура для определения дубликатов (скорее всего сбалансированное или чёрно-красное дерево по какому-нибудь хешу. В этой же структуре можно и признак "copy-on-write" хранить.Пропатченый open должен читать признак "copy-on-write" из того места, где он будет храниться и поступать в соответствии. То есть при необходимости делать что-нибудь вроде "dd file /uniq_path/uniq_name", unlink (file link (/uniq_path/uniq_name, file unlink (/uniq_path/uniq_name open (file, ...) (и разумеется на file надо скопировать "copy-on-write" с оригинала). А, если "copy-on-write" не установлен, то просто open (file).
(dd взял в кавычки, чтобы не подумали, что это надо system("dd ...") сделать


Если ты открыл файл на запись или чтение и запись, но файл не изменил (а в соответствии с "copy-on-write" файл скопировался при open'е) скрипт вернёт всё на место -- сольёт получившиеся два файла назад в один. Можно, конечно пропатчить и write с close'ом, но тогда на вскидку понадобятся дополнительные пляски с бубном вокруг имеющегося у этих функций inode и отсутствующего у них имени файла.
Это называется, какой херней все страдали до изобретения fuse.
POSIX описывает механизм, по которому можно перехватить open?
"Пропатчить," как ты пишешь.
Покажи способ перехвата open(2 опираясь на этот самый POSIX.
---
...Я работаю антинаучным аферистом...
А если прикладное ПО полезет к open поверх этой идиотской обёртки?
---
...Я работаю антинаучным аферистом...
Да и вообще, нефиг лазить мимо библиотечных функций, так хрен какой совместимости добъешся.
Двоичные форматы всё равно не совместимы, так что
с точки зрения совместимости обёртки ничего не дают.
---
...Я работаю антинаучным аферистом...
Есть функция open и находится она в libc. Я не знаю, как точно она реализована, но я знаю, что она даст мне дескриптор. Каким образом она это сделает - мне не важно.
А писать свой собственный open для каждой системы, для каждой версии ядра - смысла нет.
ради нескольких пустых оболочек вокруг вызовов ядра.
Все системозависимые функции принято определять в одном месте.
Расскажи, когда менялся интерфейс open? Приведи номера версий ядер.
---
...Я работаю антинаучным аферистом...
А что это?
Переписывать системный вызов -- означает переписывать (в случае open'а) файловую систему.Вот это ты наврал.
web page). Вкратце --- существенно упрощает разработку собственных файловых систем (не надо задумываться о специфике ядра, пишется обычный userspace процесс, который использует библиотечку). Хотя, написание чего-то типа watchdog (т.е. не создающих новую ФС с нуля, а как-то подменяющих вызовы к существующей) весьма затруднено, хотя может быть выполнено с помощью индивидуальных mount в Linux.
Специфично для Linux. Возможно, аналоги есть в иных ОС.
Filesystem in userspace ( Специфично для Linux. Возможно, аналоги есть в иных ОС.
LD_LIBRARY_PATH=/path/to/my/lib/with/my/own/open:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
> Пропатчить библиотечную функцию open более простая задача.
А если прикладное ПО полезет к open поверх этой идиотской обёртки?
Проблемы возникнут только с непереносимым, не удовлетворяющим POSIX'у ПО. Причём сильно нарушающим POSIX. Я немного видел программ, которые лезут в syscall'ы не через описанные в POSIX интерфейсные функции, вроде того же open.
А зачем такой библиотечный вызов, который просто обёртка вокруг ядерного?
Двоичные форматы всё равно не совместимы, так что
с точки зрения совместимости обёртки ничего не дают.
Вообще думал, что писал?

Для переносимости исходного кода. Чтобы одна и та же программа компилировалась и работала на разных системах. Для этого она должна использовать только описанные в общем для этих систем стандарте методы доступа к ресурсам. Застандартизировать syscall'ы нельзя, они уже на разном железе разные. По этому стандартизовали C-шные функции для доступа к ресурсам системы, по крайней мере на C тоже стандарт есть (для переносимости стандартизация должна быть полной, в том числе до уровня языка программирования).
Расскажи, когда менялся интерфейс open? Приведи номера версий ядер.
Интерфейс системного вызова open меняется между Solaris, Ultrix, IRIX, Linux, QNX, MINUX, Haselnut/L4, etc. Более того, не у всех названных систем вообще есть системный вызов open. А вот функция open есть у всех них. И даже у Windos'а небось есть -- хоть там и кастрированный POSIX допотопной версии.
Переписывать системный вызов -- означает переписывать (в случае open'а) файловую систему.Вот это ты наврал.
Я имел в виду, что необходимость вмешаться именно в системный вызов (open) означает необходимость вмешаться в функционал сервисов OS (в данном случае, в файловую систему). Если нет необходимости править драйвер файловой системы, нет и необходимости лезть переписывать syscall.


Еще раз. Есть возможность писать на fuse watchdog-style файловые системы (сам такую написал . При этом, нет никакого смысла самому заниматься хранением файлов. Они будут содержаться в БД/обычной файловой системе. Именно этим fuse и хорош --- ну и еще тем, что можно на python писать.
---
...Я работаю антинаучным аферистом...
так что переносимость нисколько не страдает.
> для переносимости стандартизация должна быть полной,
> в том числе до уровня языка программирования
Если две системы похожи друг на друга как две капли воды,
то это _одна_ система, а не две.
О какой переносимости ты тогда говоришь?
---
...Я работаю антинаучным аферистом...
Может это и будет работать, но я с fuse не сталкивался
И как у тебя будут работать статически слинкованные программы?
Да, статически слинкованные программы -- это единственный повод залезть в ядро. Но статически слинкованные с libc программы попадаются крайне редко -- обычно это специальные версии общих утилит вроде шела, предназначенные на случай ручного восстановления системы (собственно из предположения некорректного функционирования системы и берётся необходимость собирать их статически).
Всё, что лежит в /sbin & /usr/sbin.
Таковы классические униксовые соглашения.
Кто первым вспомнил про соляру?
> предназначенные на случай ручного восстановления системы
Это вообще наглая ложь, потому что статически линкуют не для этого.
---
...Я работаю антинаучным аферистом...
Написание ядерного вызова не настолько сложно,
так что переносимость нисколько не страдает.
Переносимость и сложность программы -- разные понятия. Написание кода ядра сложно в отладке и чревато большими разрушениями в случае сбоев после отладки, чем изменение libc.
> для переносимости стандартизация должна быть полной,
> в том числе до уровня языка программирования
Если две системы похожи друг на друга как две капли воды,
то это _одна_ система, а не две.
О какой переносимости ты тогда говоришь?
Среди перечисленных мною систем
Solaris, Ultrix, IRIX, Linux, QNX, MINUX, Haselnut/L4
нет ни одной пары похожих друг на друга как две капли воды. Тем не менее хорошо написанная программа, удовлетворяющая POSIX может быть легко перенесена с одной из этих систем на другую. Это и есть переносимость.
> может быть легко перенесена с одной из этих систем на другую.
> Это и есть переносимость.
Это не переносимость.
Это просто программа написана под платформу POSIX.
Вот и расскажи, как, опираясь на POSIX, сделать перехват всего, что будет выполнять open(2).
Не open(3 а именно open(2).
Хотя бы на Linux.
---
...Я работаю антинаучным аферистом...
> Но статически слинкованные с libc программы попадаются крайне редкоКакие такие соглашения? Что-то ничего такого в POSIX не видел.
Всё, что лежит в /sbin & /usr/sbin.
Таковы классические униксовые соглашения.
Кто первым вспомнил про соляру?
Всё, что лежит в /sbin и /usr/sbin, говоришь?
# ls -1 /sbin | wc -l
308
# file /sbin/* | grep statically
/sbin/busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/cryptsetup: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/dmraid.static: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/dmsetup.static: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/dump: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/e2fsck: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/fsck.ext2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/fsck.ext3: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/insmod.static: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV statically linked, stripped
/sbin/ldconfig: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/lvm.static: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/nash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV statically linked, stripped
/sbin/restore: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/rmt: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/sash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/sbin/sln: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, not stripped
/sbin/udev.static: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
# ls -1 /usr/sbin | wc -l
630
# file /usr/sbin/* | grep statically
/usr/sbin/build-locale-archive: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/usr/sbin/glibc_post_upgrade.i686: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/usr/sbin/libgcc_post_upgrade: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
/usr/sbin/prelink: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV for GNU/Linux 2.2.5, statically linked, stripped
> предназначенные на случай ручного восстановления системы
Это вообще наглая ложь, потому что статически линкуют не для этого.
Расскажи нам для чего.
Вот и расскажи, как, опираясь на POSIX, сделать перехват всего, что будет выполнять open(2).
Не open(3 а именно open(2).
Уже писал. Не для всего, но для всего, что будет реально использоваться. А в связи с идеей
задействовать fuse, даже моё предложение теряет актуальность, не говоря уж о бреде переписывания syscall'а.
Кто первым вспомнил о соляре и других осях?
Статически линкуют для того, чтобы не быть зависимым от внешних библиотек.
А причины для этой независимости могут быть самыми разными.
Я уж не говорю, что вот это
> из предположения некорректного функционирования системы
> и берётся необходимость собирать их статически
вообще идёт по ложному пути.
Если кто-то смог побить libc, то он точно так же мог побить и /sbin,
а ремонтная система вполне может работать и с ремонтной версией libc.
---
...Я работаю антинаучным аферистом...
> Уже писал.
Ты не умеешь читать?
Цифры "2" и "3" различаешь по написанию?
Первая же статически слинкованная программа побьёт твою систему.
Хочешь сказать, что POSIX не допускает статически слинкованные программы?
На то, что будет реально использоваться, ты накладываешь очень жёсткие условия,
в реальной жизни, в частности, в условиях поставленной задачи, почти невыполнимые.
---
...Я работаю антинаучным аферистом...
> GNU/Linux 2.2.5
Кто первым вспомнил о соляре и других осях?
Я просто привёл пример системы, под которой нарушается заявленное тобой про статически слинкованные проги:
Всё, что лежит в /sbin & /usr/sbin.
Таковы классические униксовые соглашения.
А остальные ОСи -- ну может они тебе и помогут: если найдёшь среди них, ту под которой всё что там лежит скомпилено статически -- сможешь себя частично реабилитировать.
Кстати, статически слинкованные проги тоже больших проблем не вызывают, если есть исходники к ним. Надо просто перекомпилировать их с пропатченной libc -- и вот тебе счастье.
>> Не open(3 а именно open(2).
> Уже писал.
Ты не умеешь читать?
Цифры "2" и "3" различаешь по написанию?
Почему вы так старательно предлагаете мне то, что я предлагал автору треда? Читаем man 2 open:
OPEN(2) System calls OPEN(2)
NAME
open, creat - open and possibly create a file or device
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
И видим 2 С-шные функции (именно две, а не три, С-шные функции различаются по именам, а не по имя+сигнатура одну из которых я и предлагал пропатчить -- open, у неё здесь 2 сигнатуры.
Читаем дальше:
DESCRIPTION
The open system call is used to convert a pathname into a file
descriptor (a small, non-negative integer for use in subsequent I/O
as with read, write, etc.).
Ах вот оно что, слова "system call" производят переполох в юных, неокрепших умах

, включи мозг и попробуй подумать

Смотрим fcntl.h:
#ifndef __USE_FILE_OFFSET64
extern int open (__const char *__file, int __oflag, ...) __nonnull 1;
#else
# ifdef __REDIRECT
extern int __REDIRECT (open, (__const char *__file, int __oflag, ... open64)
__nonnull 1;
# else
# define open open64
# endif
#endif
#ifdef __USE_LARGEFILE64
extern int open64 (__const char *__file, int __oflag, ...) __nonnull 1;
#endif
Делаем
$ objdump -x /lib/libc.so.6 | grep open64
Кроме прочей лабуды видим два символа, ссылающихся на один адрес:
000b9a80 w F .text 000000ba open64
000b9a80 w F .text 000000ba __open64
Делаем:
$ objdump -d /lib/libc.so.6 | grep -A 70 000b9a80
и по адресу b9acd наконец-то видим syscall (int $0x80 также видим кучу лабуды, относящуюся к open(2) -- обёртке этого syscall'а:
000b9a80 <__open64>:
b9a80: 55 push %ebp
b9a81: b8 00 00 00 00 mov $0x0,%eax
b9a86: 89 e5 mov %esp,%ebp
b9a88: 83 ec 14 sub $0x14,%esp
b9a8b: 89 75 f8 mov %esi,0xfffffff8(%ebp)
b9a8e: 8b 75 0c mov 0xc(%ebp%esi
b9a91: 89 5d f4 mov %ebx,0xfffffff4(%ebp)
b9a94: e8 b8 b6 f5 ff call 15151 <__i686.get_pc_thunk.bx>
b9a99: 81 c3 5b e5 06 00 add $0x6e55b,%ebx
b9a9f: 89 7d fc mov %edi,0xfffffffc(%ebp)
b9aa2: f7 c6 40 00 00 00 test $0x40,%esi
b9aa8: 8b 93 10 2a 00 00 mov 0x2a10(%ebx%edx
b9aae: 0f 45 45 10 cmovne 0x10(%ebp%eax
b9ab2: 8b 7d 08 mov 0x8(%ebp%edi
b9ab5: 85 d2 test %edx,%edx
b9ab7: 89 45 ec mov %eax,0xffffffec(%ebp)
b9aba: 75 2d jne b9ae9 <__open64+0x69>
b9abc: 81 ce 00 80 00 00 or $0x8000,%esi
b9ac2: 89 c2 mov %eax,%edx
b9ac4: 89 f1 mov %esi,%ecx
b9ac6: 87 df xchg %ebx,%edi
b9ac8: b8 05 00 00 00 mov $0x5,%eax
b9acd: cd 80 int $0x80
b9acf: 87 fb xchg %edi,%ebx
b9ad1: 3d 00 f0 ff ff cmp $0xfffff000,%eax
b9ad6: 89 c6 mov %eax,%esi
b9ad8: 77 40 ja b9b1a <__open64+0x9a>
b9ada: 89 f0 mov %esi,%eax
b9adc: 8b 5d f4 mov 0xfffffff4(%ebp%ebx
b9adf: 8b 75 f8 mov 0xfffffff8(%ebp%esi
b9ae2: 8b 7d fc mov 0xfffffffc(%ebp%edi
b9ae5: 89 ec mov %ebp,%esp
b9ae7: 5d pop %ebp
b9ae8: c3 ret
b9ae9: e8 a2 c9 01 00 call d6490 <__librt_enable_asynccancel>
b9aee: 89 45 f0 mov %eax,0xfffffff0(%ebp)
b9af1: 81 ce 00 80 00 00 or $0x8000,%esi
b9af7: 8b 55 ec mov 0xffffffec(%ebp%edx
b9afa: 89 f1 mov %esi,%ecx
b9afc: 87 df xchg %ebx,%edi
b9afe: b8 05 00 00 00 mov $0x5,%eax
b9b03: cd 80 int $0x80
b9b05: 87 fb xchg %edi,%ebx
b9b07: 3d 00 f0 ff ff cmp $0xfffff000,%eax
b9b0c: 89 c6 mov %eax,%esi
b9b0e: 77 1a ja b9b2a <__open64+0xaa>
b9b10: 8b 45 f0 mov 0xfffffff0(%ebp%eax
b9b13: e8 e8 c9 01 00 call d6500 <__librt_disable_asynccancel>
b9b18: eb c0 jmp b9ada <__open64+0x5a>
b9b1a: f7 de neg %esi
b9b1c: e8 ef ba f5 ff call 15610 <__errno_location>
b9b21: 89 30 mov %esi%eax)
b9b23: be ff ff ff ff mov $0xffffffff,%esi
b9b28: eb b0 jmp b9ada <__open64+0x5a>
b9b2a: f7 de neg %esi
b9b2c: e8 df ba f5 ff call 15610 <__errno_location>
b9b31: 89 30 mov %esi%eax)
b9b33: be ff ff ff ff mov $0xffffffff,%esi
b9b38: eb d6 jmp b9b10 <__open64+0x90>
b9b3a: 90 nop
b9b3b: 90 nop
b9b3c: 90 nop
b9b3d: 90 nop
b9b3e: 90 nop
b9b3f: 90 nop
000b9b40 <__close>:
...........................................
Прямо перед int $0x80 видим:
b9ac2: 89 c2 mov %eax,%edx
b9ac4: 89 f1 mov %esi,%ecx
b9ac6: 87 df xchg %ebx,%edi
b9ac8: b8 05 00 00 00 mov $0x5,%eax
b9acd: cd 80 int $0x80
Во втором варианте:
b9af7: 8b 55 ec mov 0xffffffec(%ebp%edx
b9afa: 89 f1 mov %esi,%ecx
b9afc: 87 df xchg %ebx,%edi
b9afe: b8 05 00 00 00 mov $0x5,%eax
b9b03: cd 80 int $0x80
Респект.
Но моя практика показывает, что когда приводятся неоспоримые аргументы, KOHTPа начинает гнать какую-то фигню и переводит разговор в другое русло.

А если нет?
---
...Я работаю антинаучным аферистом...
Так вот. Выкинь Си к чёрту.
Объясни, начерта писать обёртку, если можно сразу встраивать вызов ядра?
И незачем ссылаться на кривизну компилятора сей.
---
...Я работаю антинаучным аферистом...
> если есть исходники к ним.
А если нет?
А это вопрос к автору треда -- пользуется ли он такими программами. Кроме того, предложил использовать fuse, вот fuse и будет использоваться, если автору треда нужны такие программы.
Ты выбрал Си.Ничего не выбирал
Так вот. Выкинь Си к чёрту.


Объясни, начерта писать обёртку, если можно сразу встраивать вызов ядра?А ты знаешь компилятор, который кодогенерит int или sysenter, а не берёт их из библиотек или define'ов? Приведи пример такого компилятора. Это будет новое слово в науке и технике
И незачем ссылаться на кривизну компилятора сей.


Наверняка это уже есть и в промышленных системах.
---
...Я работаю антинаучным аферистом...
---
"Истина грядёт --- её ничто не остановит!"
Этот компилятор не настолько сложно написать. Я такое делал.Тебе остаётся только дать 'у свой компилятор, чтобы было ему счастье

Итого, переписывание open(3) задачу не решает.
Это ты к чему? Я open(2) переписывать предлагаю, а про open(3) -- это всё ты сам придумал

Оставить комментарий
durka82
То есть если в нескольких папках лежат одинаковые файлы - то они должны храниться только как один файл.Но если изменяется один из файлов - не факт, что меняются все (например, система должна спрашивать).
Есть такое?