|
папка это файл?
|
|||
---|---|---|---|
#18+
Доброе время суток. Скоро закончу читать K&R, сколько усилий было потрачено хорошо хоть на период изоляции легло. но вот они пишут , что в Unix папка представляет собой файл с которым можно проделать _open("dirname",...) , а затем собрать статистику по средствам stat(fd,...). Но у меня Win7 (файл ли там папка ?), а папку я создал, но результат функции _open -1. конкретно пытался вот так : fd = _open("dirname", _S_IREAD, 0); параметры функции не нашел где почитать про эти всякие _S_IREAD и прочее для винды (наверно ж это дело отличается в зависимости от операционки ?) . видимо на таком низком уровне никто уже не работает и никому не интересно. исходя хотелось бы помощи в следующих вопросах: просьба подсказать как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? с какими параметрами ? p.s. папка реально существует там где надо. так как _open отрабатывает с простым текстовым созданным файлом ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 22:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? Никак. Во времена K&R никакой Windows ещё не существовало даже в проекте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 23:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? Никак. Во времена K&R никакой Windows ещё не существовало даже в проекте. да , но _open адаптирован для обычных файлов в винде. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2020, 23:03 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
И чо? (с) Уже одно его название, начинающееся с подчёркивания, говорит, что это какая-то левая фигня, тянущаяся со времён доисторических. Удивительно не то, что оно не работает местами, а то, что местами оно таки работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 00:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И чо? (с) Уже одно его название, начинающееся с подчёркивания, говорит, что это какая-то левая фигня, тянущаяся со времён доисторических. Удивительно не то, что оно не работает местами, а то, что местами оно таки работает. Хорошо тогда, но тогда наверно есть что-то обновленное. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 01:22 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 папка это файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 01:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 что в Unix папка Мамка. Папки у тебя в венде, а в unix - каталоги. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 06:48 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
crutchmaster, Очень ценная информация. И как я раньше жил с этим заблуждением. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 06:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Файлы и папки - физически это последовательность секторов на диске. Дальше правила ФС на логическом уровне делят что считать папкой, что файлом, что пустым местом и т.д. Технически можно представить папку файлом и прочитать его, но не средствами С. Вобщем тебе туда лезть не за чем. Язык С тебе дает средства для работы с файлами и папками - вот ими и пользуйся, если чего-то не хватает - есть API используемой ОС. Если очень интересно как оно там внутри устроено, то гугли описание устройства файловой системы. В случае с виндовсом - NTFS. За полсотни лет с момента написания книги в организации ФС много чего поменялось. PS K&R это книга по языку С, но язык далеко не все охватывает, для некоторых задач требуется дополнительно использовать средства ОС и/или специализированные библиотеки. Например если интересно все возможности виндавса поизучать - читай Рихтера Windows via C/C++ . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T Файлы и папки - физически это последовательность секторов на диске. Дальше правила ФС на логическом уровне делят что считать папкой, что файлом, что пустым местом и т.д. Технически можно представить папку файлом и прочитать его, но не средствами С. Вобщем тебе туда лезть не за чем. Язык С тебе дает средства для работы с файлами и папками - вот ими и пользуйся, если чего-то не хватает - есть API используемой ОС. Если очень интересно как оно там внутри устроено, то гугли описание устройства файловой системы. В случае с виндовсом - NTFS. За полсотни лет с момента написания книги в организации ФС много чего поменялось. PS K&R это книга по языку С, но язык далеко не все охватывает, для некоторых задач требуется дополнительно использовать средства ОС и/или специализированные библиотеки. Например если интересно все возможности виндавса поизучать - читай Рихтера Windows via C/C++ . ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:18 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) Задача какая? Получить содержимое папки виндовса? Изучай FindFirstFile() из WinAPI ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 а тут или найти аналог для винды Какой аналог и почему он должен быть? В Windows нет posix. Цепляй вендовые либы, там свои реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:35 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 ну так аналоги _open должны быть для винды. Задачу надо решить в концепции _open , а тут или найти аналог для винды , либо установить UNIX , либо положить болт на задачу. хочется первый вариант. а с K&R скоро нудные вопросы прекратятся - заканчивается. потерпите ))))) Задача какая? Получить содержимое папки виндовса? Изучай FindFirstFile() из WinAPI ОС: win7. задача вывести список файлов в папке. А если в папке есть подпапки тогда выводить и их файлы, если в тех есть подпапки то выводим и их файлы .... в общем по сути рекурсивный обход дерева каталогов . findfirst это как бы другая концепция решения задачи. можно , конечно. я просто думал, что вот эти _open они ведь работают для винды в случае простых файлов. предполагал, что и для моей задачи адаптированы и можно ей прочитать папку как файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 ну так аналоги _open должны быть Условный "юниксвей" исходит из не слишком практичной мысли, что небольшого количества примитивов достаточно для (самостоятельного) изготовления "чего угодно". На даже в POSIX API есть отдельный readdir, поскольку "проколоться" самостоятельно разбирая (известную) структуру каталога - как два пальца об асфальт. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov andron81 ну так аналоги _open должны быть да мне должны ! а если серьёзно если оставили функцию _open для обычных файлов, а не бросили её и не написали свою(хотя и свои вроде бы написали, но об аналогах никто не написал), то наверно могли и к папке такое же отношение сохранить(то есть как файлу). Название темы какое ? Папка это файл ? в винде выходит, что нет ! такого же ответа мне никто не даёт. вот в K&R пишут, да текст древний но всё - таки : Так как в системе UNIX каталог — это тоже файл, функции ls, чтобы добраться до имен файлов, нужно только его прочитать. Но чтобы получить другую информацию о файле (например узнать его размер), необходимо выполнить системный вызов. В других системах (в MS-DOS, например) системным вызовом приходится пользоваться даже для получения доступа к именам файлов. Наша цель — обеспечить доступ к информации по возможности системно-независимым способом несмотря на то, что реализация может быть существенно системно-зависима. p.s. До этого задачки под юникс в книге удавалось на винду переписать. С вашей помощью , да. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 09:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Basil A. Sidorov пропущено... Кому должны??? Вам? да мне должны ! а если серьёзно если оставили функцию _open для обычных файлов, а не бросили её и не написали свою(хотя и свои вроде бы написали, но об аналогах никто не написал), то наверно могли и к папке такое же отношение сохранить(то есть как файлу). Название темы какое ? Папка это файл ? в винде выходит, что нет ! такого же ответа мне никто не даёт. вот в K&R пишут, да текст древний но всё - таки : Так как в системе UNIX каталог — это тоже файл, функции ls, чтобы добраться до имен файлов, нужно только его прочитать. Но чтобы получить другую информацию о файле (например узнать его размер), необходимо выполнить системный вызов. В других системах (в MS-DOS, например) системным вызовом приходится пользоваться даже для получения доступа к именам файлов. Наша цель — обеспечить доступ к информации по возможности системно-независимым способом несмотря на то, что реализация может быть существенно 1. каталог это файл и в Windows, только что бы открыть его как файл нужно пользоваться WinApi, в общих библиотеках ЯП теперь такое не поощряется и при общем практическом программировании вам это дожно быть не интересно 2. системным вызовам называют вызов который перключает контекст выполнения на ядро системы. в MSDos вы сами писали системные вызовы (хотя для той модели памяти это определение и условно, физической изоляции ядра не было), напрямую вызывая прерывания, в Winapi это делают за вас реализации функции API системы (в Linux кстати тоже используется такая прослойка). Теперь описания вызовов скрыты от вас и напрямую их вызывать не стоит. во-первых они не документированы, во-вторых - могут поменяться 3. независимый способ просмотра каталогов представляют все существующие промышленные языки в своём RTL, который написан под конкретную систему, но с практически одинаковым интерфейсом для разных ОС - тынц вот этими интерфейсами и пользуйтесь на здоровье (opendir, readdir, closedir), и будет вам платформонезависимое счастье ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:09 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. в юникс можно. а тут фигвам ... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
crutchmaster andron81 что в Unix папка Мамка. Папки у тебя в венде, а в unix - каталоги. нет там каталогов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 10:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Доброе время суток. Скоро закончу читать K&R, сколько усилий было потрачено хорошо хоть на период изоляции легло. но вот они пишут , что в Unix папка представляет собой файл с которым можно проделать _open("dirname",...) , а затем собрать статистику по средствам stat(fd,...). Но у меня Win7 (файл ли там папка ?), а папку я создал, но результат функции _open -1. конкретно пытался вот так : fd = _open("dirname", _S_IREAD, 0); параметры функции не нашел где почитать про эти всякие _S_IREAD и прочее для винды (наверно ж это дело отличается в зависимости от операционки ?) . видимо на таком низком уровне никто уже не работает и никому не интересно. исходя хотелось бы помощи в следующих вопросах: просьба подсказать как в моем случае должна выглядить fd = _open("dirname", _S_IREAD, 0); ?? с какими параметрами ? p.s. папка реально существует там где надо. так как _open отрабатывает с простым текстовым созданным файлом Мне кажется у меня дежа-вю и я уже писал тебе. Если ты - программист под Windows - то для работы с файловой системой тебе надо использовать Windows API для работы с файлами и каталогами. NTFS и Unix файловые системы очень архитетурно отличаются. Например в Unix можно создавать символические линки на файлы. Можно создавать именованные канальные устройства (файл-труба) где с одной стороны пишут и с другой читают. И есть определённые старые договорённости касающиеся наименований файлов (case-sensitive) и Lookup (тоже case-sensitive). Есть биткарта атрибутов RWX продублированных трижды для себя и для группы и для всех. И есть экзотические биты типа sticky. Все это в Windows НЕ РАБОТАЕТ. Тоесть. Если ты решил и дальше серъезно углубляться в архитектуру K&R в части файловой системы то тебе просто органически необходимо уходить с Windows. Или будешь почемучкой и будешь постоянно приходить сюда и спрашивать почему у тебя в Windows не выходит что-то сделать. Ты уже далеко вышел за рамки С/C++. И отвечая на твой вопрос. Нет. Папка это не файл. И незачем тебе дальше углубляться в этот вопрос если ты не хочешь создавать свои драйверы файловых систем. Почитай по ключевым словам Virtual File System, Inode для кругозора. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 11:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Задачу надо решить в концепции _open Вы как то рано в в архитектуру полезли) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 petrav andron81, Ну вообще, да, всегда считалось, что папка это файл. И в винде тоже. Но это касается сугубо внутреннего устройства файловой системы. Не факт что такой файл удастся открыть с помощью функций для открытия файлов. в юникс можно. а тут фигвам ... Где он этот юникс? Забей на это упражнение, эта тема нынче очень устарела, подход работы с папками в корне поменялся, потому не работает. Переходи к следующему упражнению. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:19 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T Переходи к следующему упражнению. +1 На данном этапе тоже советую автору делать упражнения из сети или книги. Архитектура и "как лучше" - потом. Главное набить руку писать код без ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:28 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 пропущено... в юникс можно. а тут фигвам ... Где он этот юникс? Забей на это упражнение, эта тема нынче очень устарела, подход работы с папками в корне поменялся, потому не работает. Переходи к следующему упражнению. это одно из последних, скоро глупости закончатся с моей стороны тут. Цель упражнения не архитектура и низкоуровневый фарш. надо в этих рамках и проработать. а если поставить грубо говоря виртуальную машину Юникс . ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 12:53 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 а если поставить грубо говоря виртуальную машину Юникс . Попробуй, только где его взять? Умер он давно. https://qastack.ru/unix/33750/is-there-a-way-to-download-pure-unix Unix как отдельная сущность не существует как современная операционная система. Как указано в комментариях для unix-производных: Несколько систем начинали с исходного кода Unix, но со временем он был записан, поэтому оригинальный код Unix не сохранился. Наиболее известными примерами являются OpenSolaris, FreeBSD, NetBSD и OpenBSD. ... Современные дистрибутивы не содержат какого-либо оригинального кода Unix или, по крайней мере, ни одного из свободно доступных вариантов с открытым исходным кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:02 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T, а virtualBox + ubunta ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:04 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Например в Unix можно создавать символические линки на файлы. и в винде можно ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:06 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Цель упражнения не архитектура и низкоуровневый фарш. надо в этих рамках и проработать. Если тебе просто хочется парсить папку как файл, то сначала запускай для папки Код: plaintext 1.
затем парси файл file.lst, структура файла другая, но суть упражнения это не меняет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:07 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Изопропил mayton Например в Unix можно создавать символические линки на файлы. и в винде можно Это очень хорошо. Тогда давайте матрицу совместимости. Операционок. И версий NTFS. Чтоб бедного автора окончательно добить экспертизой. Я в общем говорил. Для широкого науч-попа. В общем не поддерживает. Since какая-то версия - да. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:09 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Изопропил mayton Например в Unix можно создавать символические линки на файлы. и в винде можно имеешь ввиду винду 10ку ? насколько я знаю там файловая система будет виндовая . не ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:10 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravНу вообще, да, всегда считалось, что папка это файл. И в винде тоже. Если некоторые функции универсальны для папки и файла и при этом возвращают файловый хэндл, это ещё не повод провозглашать их тождественность. Аффтар, про readdir тебе уже сказали, займись и изучением остальных функций из спецификации POSIX. Ну или просто перейди с MSVC на GCC, поскольку у них (внезапно) местами разные RTL и функция с одинаковым названием (в особенности начинающимся с подчёркивания) могут иметь совершенно разное поведение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:16 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, хочу это попробовать: virtualBox + ubunta ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:20 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Изопропил пропущено... и в винде можно имеешь ввиду винду 10ку ? насколько я знаю там файловая система будет виндовая . не ? В 7-ке линки точно есть, пользуюсь. Для создания в Far`е нажать Alt+F6. Вроде в XP тоже было, точно не помню, но могу проверить если это важно. В винде максимум плюшек можно получить используя NTFS, другие ФС применимы разве что для съемных носителей, которые помимо винды еще используются в невиндовых устройствах. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Dima T, а virtualBox + ubunta ? убунта это linux, а linux это семейство Unix-подобных операционных систем на базе ядра Linux. Т.е. linux писался глядя на юникс, но не тупо его копируя. Пробуй, скачать и установить за час можно неспеша, но что-то мне подсказывает что не поможет это. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:23 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T system("dir c:\folder\*.* > file.lst"); мы ведь таким образом только одну папку ассоциируем с фалом ? а подпапки тоже надо. если так , то не пойдет ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:28 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
В топике - неверно поставлена задача. Я убежден что если кто-то береться как преподаватель читать устаревший курс программирования - то он будет вынужден на своей шкуре пройти через все уроки и адаптировать их к новым условиям. Я вот читаю Роберта Лава. Книжка 2008 года. И там надо сказать есть много отсылок к стандартам Unix, POSIX, BSD, к функционалу который морально устарел. Или не везде точно реализован. Дак это в рамках Linux Kernel! Что вообще будет если вы ковырнете МакОС или Андроид? Там - конь не валялся. Мы к Лаву еще вернемся когда я пушну тему кешей. Не Розовскую. А свою. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Dima T system("dir c:\folder\*.* > file.lst"); мы ведь таким образом только одну папку ассоциируем с фалом ? а подпапки тоже надо. если так , то не пойдет Код: plaintext 1.
обходит все подкаталоги. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:30 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton andron81 пропущено... мы ведь таким образом только одну папку ассоциируем с фалом ? а подпапки тоже надо. если так , то не пойдет Код: plaintext 1.
обходит все подкаталоги. Подозреваю ты тут все его задание сделал целиком ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:33 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonЧто вообще будет если вы ковырнете МакОС или Андроид? Внезапно в первом обнаружится ядро BSD, а во втором - линуха. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:33 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Dima T system("dir c:\folder\*.* > file.lst"); мы ведь таким образом только одну папку ассоциируем с фалом ? а подпапки тоже надо. если так , то не пойдет в этом файле будет все - и подпапки и файлы. Т.е. полный аналог каталога. Запусти консоль (cmd.exe) и выполни там Код: plaintext 1.
PS Пост mayton`а натолкнул на мысль что ты не для себя делаешь, а чтобы студентам задавать. Если так, то не надо таким извратам детей учить. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:38 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonЧто вообще будет если вы ковырнете МакОС или Андроид? Внезапно в первом обнаружится ядро BSD, а во втором - линуха. Это прекрасно. Наша матрица еще сильнее растет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:40 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Боюсь в исходном задании нет задачи с помощью _open() пронавигировать по всему дереву подпапок и файлов. А лишь прочитать аттрибуты папки воспринимая папку как файл. Не знаю устройство NTFS но вполне допускаю, что и там папка -- это в первую очередь файл, к которому прицеплен список дочерних элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Когда думаете в парадигме Windows - мысленно представляйте что в файловой системе смонтирован весь набор возможных систем таких как - NTFS 4.x, 5.x .... e.t.c. - FAT32 (флешка) - ExFat (еще одна чортова флешка тоже) И нет никаких оснований исключать что таких случаев не будет. Ну или к списку можно добавить внешний сетевой диск (кажется проткол SMB/CIFS). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 13:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Как раз о Кернигане и Риччи: https://stackoverflow.com/questions/21405048/linux-open-directory-as-a-file Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 14:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Когда думаете в парадигме Windows - мысленно представляйте что в файловой системе смонтирован весь набор возможных систем таких как - NTFS 4.x, 5.x .... e.t.c. - FAT32 (флешка) - ExFat (еще одна чортова флешка тоже) И нет никаких оснований исключать что таких случаев не будет. Ну или к списку можно добавить внешний сетевой диск (кажется проткол SMB/CIFS). и MTP да WebDAV до кучи ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 16:50 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Контр-продуктивно педалировать тему "фолдер==файл" для нашего топик-стартера. Вы его запутываете еще дальше. Какой прикладной смысл ему знать это? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Контр-продуктивно педалировать тему "фолдер==файл" для нашего топик-стартера. Вы его запутываете еще дальше. Какой прикладной смысл ему знать это? А зачем это у К&R ? Как раз очень полезно: наводит на мысли как могла бы быть реализована ФС. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 18:54 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Я даже более скажу. Почти все ФС на уровне внутренней структуры реализуют фолдеры как файлы. Даже самый древний FAT-12bit на дискетках. Но вы это знание не сможете обобщить. Ни к VFS, ни к сетевым протоколам ни к древовидным БД вы не пришъете эту метафору. Поэтому я и говорю. Забавный инженерный факт. Но зачем это юноше изучающему С ? Он что будет лечить файловые системы? Для этого уже пол-века есть готовые утилиты которые прекрасно работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:00 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Поэтому я и говорю. Забавный инженерный факт. Но зачем это юноше изучающему С ? Для общего развития. А что такое FAR-12bit ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:10 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Исправил. Тороплюсь. Очепятки делаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:16 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, Кстати, если бы мы реализовывали дерево (не бинарное) в памяти... причём в этом дереве могли бы быть элементы различных типов и папки. То очень может быть, что в дереве бы хранились INode * , а класс "Folder" был бы наследником от "INode". Опыт отлично обобщается, как видите. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:24 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Какой прикладной смысл ему знать это? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:24 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav mayton, Кстати, если бы мы реализовывали дерево (не бинарное) в памяти... причём в этом дереве могли бы быть элементы различных типов и папки. То очень может быть, что в дереве бы хранились INode * , а класс "Folder" был бы наследником от "INode". Опыт отлично обобщается, как видите. Это - всё структуры оптимизированные для диска. Для программирования в общем виде они лишены смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:28 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav, давай чтоб здесь не флудить поднимем отдельную тему - файловые системы и их организация и там поделимся мыслями. Я хотел создать ФС для временных файлов. Rotate-FS. (Rot-fs) где файлы пишуться по кругу и автоматически удаляются когда нет места. По сути такой себе Redis огромного размера на диске. Хотел обсудить ведение приоритетов и эвристик для сохранения файлов которые "всё таки нужны на всякий случай". ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 19:42 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, Поднимайте, тока я не разбираюсь в ФС-ах. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 20:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Я хотел создать ФС для временных файлов. Rotate-FS. (Rot-fs) где файлы пишуться по кругу и автоматически удаляются когда нет места. файлы то разные по размеру все... и чё будет, когда ты потрёшь файл 100 кб, а надо записать 200кб? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 00:25 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Видишь как замечательно. Уже есть о чем говорить. И тема - инженерная. Без теологии с филисофией типа считать демонов ангелами, а фолдеры - файлами. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 08:54 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton petrav, давай чтоб здесь не флудить поднимем отдельную тему - файловые системы и их организация и там поделимся мыслями. Я хотел создать ФС для временных файлов. Rotate-FS. (Rot-fs) где файлы пишуться по кругу и автоматически удаляются когда нет места. По сути такой себе Redis огромного размера на диске. Хотел обсудить ведение приоритетов и эвристик для сохранения файлов которые "всё таки нужны на всякий случай". Это не совсем временные файлы получаются, а какой-то вытесняющий кэш. Для временных все уже есть. В виндавсе достаточно указать флаг при создании файлов https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea CreateFileA function ... FILE_ATTRIBUTE_TEMPORARY The file is being used for temporary storage. For more information, see the Caching Behavior section of this topic. В линуксе http://opennet.ru/cgi-bin/opennet/man.cgi?topic=tmpfile FILE *tmpfile (void); Функция tmpfile() создает уникальное имя временного файла. Временный файл открывается в двоичном режиме ввода-вывода (w+b). Файл автоматически удаляется при его закрытии или в случае нормального завершения основной программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 09:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T mayton petrav, давай чтоб здесь не флудить поднимем отдельную тему - файловые системы и их организация и там поделимся мыслями. Я хотел создать ФС для временных файлов. Rotate-FS. (Rot-fs) где файлы пишуться по кругу и автоматически удаляются когда нет места. По сути такой себе Redis огромного размера на диске. Хотел обсудить ведение приоритетов и эвристик для сохранения файлов которые "всё таки нужны на всякий случай". Это не совсем временные файлы получаются, а какой-то вытесняющий кэш. Для временных все уже есть. В виндавсе достаточно указать флаг при создании файлов Насобирали материала для пятничного вопроса? Возможно я действительно делаю не аналог /tmp а нечто другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 11:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima TВ линуксе Во-первых, в линуксе уже лучше использовать O_TMPFILE. Во-вторых, эти флаги делают совершенно разные вещи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 12:52 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Поэтому я и говорю. Забавный инженерный факт. Но зачем это юноше изучающему С ? Он что будет лечить файловые системы? Для этого уже пол-века есть готовые утилиты которые прекрасно работают. Мне как минимум надо прогнать программу и понять как она работает. Суть тут как я и говорил не в низкоуровневом фарше. Там и всякие конструкции вместе с этим. Например указатель на функцию которая только второй раз всплыла. Да и юношей меня назвать сложно. Мне 39. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:24 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, Буду пробовать поднять виртуальную машину и натягивать код из k&r. А слить каталоги в файл при помощи system или просто слить с командной строки в файл и читать, идея не пошла. Во первых там мусор какой-то который я могу вручную убрать, но там еще и структура, а код будет читать посредствам read будет ли это соотвествовать той юниксовой структуре не очень понятно так как последняя мне не доступна. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:37 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Тема роутинга файлов и директорий в Windows/Unix всплывает часто. И я до сих пор не пойму почему она так сложна? Рекурсия? Или непонимание файловой организации? Как модератор я ставлю вопрос о добавлении этих исходников в непотопляемый FAQ. Давайте уже 1 раз напишем эталонную реализацию и будем на нее ссылаться. Если API будет несколько (проприетарный) и адаптированный через rtl то сделаем варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:45 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Какая-такая эталонная реализация??? Человек хочет странного - идентичный код для винды и юниксов. Иногда это возможно, иногда - не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonКак модератор я ставлю вопрос о добавлении этих исходников в непотопляемый FAQ. Давайте уже 1 раз напишем эталонную реализацию и будем на нее ссылаться. Она уже написана: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 13:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, мне нужно время чтоб проверить эту инфу и чуть позже я добавлю ее в FAQ. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:00 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Тема роутинга файлов и директорий в Windows/Unix всплывает часто. И я до сих пор не пойму почему она так сложна? Рекурсия? Или непонимание файловой организации? Как модератор я ставлю вопрос о добавлении этих исходников в непотопляемый FAQ. Давайте уже 1 раз напишем эталонную реализацию и будем на нее ссылаться. Если API будет несколько (проприетарный) и адаптированный через rtl то сделаем варианты. как это работает на пальцах я понимаю в том числе и рекрсивный алгоритм (бывают и по сложнее) Но там несколько функций и их несколько со сложными конструкциями , а K&R любят сложные , но короткие коды. А читать по книжке и на ходу понимать и представлять пока не умею. поэтому я коды все пропечатываю от руки и прорабатываю. а тут под виндами не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:00 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton Тема роутинга файлов и директорий в Windows/Unix всплывает часто. И я до сих пор не пойму почему она так сложна? Рекурсия? Или непонимание файловой организации? Как модератор я ставлю вопрос о добавлении этих исходников в непотопляемый FAQ. Давайте уже 1 раз напишем эталонную реализацию и будем на нее ссылаться. Если API будет несколько (проприетарный) и адаптированный через rtl то сделаем варианты. как это работает на пальцах я понимаю в том числе и рекрсивный алгоритм (бывают и по сложнее) Но там несколько функций и их несколько со сложными конструкциями , а K&R любят сложные , но короткие коды. А читать по книжке и на ходу понимать и представлять пока не умею. поэтому я коды все пропечатываю от руки и прорабатываю. а тут под виндами не работает. K&R использовали старые подходы в типизации которые сегодня - неприменимы. Хороший тайп-кастинг в современных языках - практически всегда проверяется на валидность либо на компилляции либо на RTTI. Хорошее булево правило стоящее в условии if не примемлет целого числа как аргумента. Требуется явный кастинг в булеан. Можно сказать что "C" и ассемблер это последний старичок-язык которые все еще позволяет играть целыми числами или не дай бог указателями как булевыми величинами. Но если ты с таким паттернализмом сунешся в другой более строгий язык - то там все эти знания будут вредны и тебе надо переучиваться. И указатели на функции - тоже в современных языках заменяюся на виртуальные методы и шаблон RCWP. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, да чуть-чуть осталось . мне уже самому надоела книжка , но надо домучить. к тому же кстати она у вас заявлена в теме про книги по Си которая в топе ! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:35 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, да чуть-чуть осталось . мне уже самому надоела книжка , но надо домучить. к тому же кстати она у вас заявлена в теме про книги по Си которая в топе ! сдался тебе тот C. Время зря теряешь. C++ наше всё и там есть <filesystem> ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 andron81 mayton, да чуть-чуть осталось . мне уже самому надоела книжка , но надо домучить. к тому же кстати она у вас заявлена в теме про книги по Си которая в топе ! сдался тебе тот C. Время зря теряешь. C++ наше всё и там есть <filesystem> плюсы это следующий этап. в плюсах без указателей делать не фиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 andron81 mayton, да чуть-чуть осталось . мне уже самому надоела книжка , но надо домучить. к тому же кстати она у вас заявлена в теме про книги по Си которая в топе ! сдался тебе тот C. Время зря теряешь. C++ наше всё и там есть <filesystem> Я не против. Мне по работе С++ все равно не нужен. Высокоуровневые вещи делаю на другом. "C" как объект для изучения нужен в тех топиках где мы приближаемся к конкретной операционке. И для ее разработки С наверное подходит лучше чем С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:57 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, для разработки чего ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 14:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Алексей Роза 2020 пропущено... сдался тебе тот C. Время зря теряешь. C++ наше всё и там есть <filesystem> плюсы это следующий этап. в плюсах без указателей делать не фиг. ошибаешься, это в C делать без указателей нефиг, а в C++ есть ссылки. И они предпочтительней указателей, т.к. nullptr не словишь случайно. И никакой это не "следующий этап"... это отдельный самостоятельный этап, которому нахрен этот C не сдался. Наоборот - он будет только мешать. Тебе создатель языка (Страуструп) открытым текстом говорит: "не тратьте время на C, сразу садитесь за C++". mayton Я не против. Мне по работе С++ все равно не нужен. Высокоуровневые вещи делаю на другом. "C" как объект для изучения нужен в тех топиках где мы приближаемся к конкретной операционке. И для ее разработки С наверное подходит лучше чем С++. ты ж говорил, что прикладник... C сегодня это уже совсем для чего-то низкоуровневого там, типа дров и микроконтроллеров. Ну и линукса ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:03 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020Тебе создатель языка (Страуструп) открытым текстом говорит: "не тратьте время на C, сразу садитесь за C++". Создатели всех языков так говорят, но надо же понимать, что их цели при этом - исключительно маркетинговые. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, для разработки чего ? Операционки. Их на сях обычно делают. Я имею в виду ядро. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Мы немножко уклонились от темы. Автор у тебя все получилось с туториалом? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:14 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 ошибаешься, это в C делать без указателей нефиг, а в C++ есть ссылки. И они предпочтительней указателей, т.к. nullptr не словишь случайно. И никакой это не "следующий этап"... это отдельный самостоятельный этап, которому нахрен этот C не сдался. Наоборот - он будет только мешать. Тебе создатель языка (Страуструп) открытым текстом говорит: "не тратьте время на C, сразу садитесь за C++". при этом, кстати, обязательно надо отметить, что сам код в C++ должен быть максимально простым и понятным Таким же простым, как C KISS - Keep It Simple Stupid ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:26 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Алексей Роза 2020Тебе создатель языка (Страуструп) открытым текстом говорит: "не тратьте время на C, сразу садитесь за C++". Создатели всех языков так говорят, но надо же понимать, что их цели при этом - исключительно маркетинговые. да ну не. ты типа не согласен, что C убог? там в разы проще ошибку совершить (при том же оверхеде) - уже это его косит. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:27 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020обязательно надо отметить, что сам код в C++ должен быть максимально простым и понятным То есть не использовать 99% этого языка, ограничиваясь "Си с объектами". Прелестно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 andron81, Буду пробовать поднять виртуальную машину и натягивать код из k&r. А слить каталоги в файл при помощи system или просто слить с командной строки в файл и читать, идея не пошла. Во первых там мусор какой-то который я могу вручную убрать, но там еще и структура, а код будет читать посредствам read будет ли это соотвествовать той юниксовой структуре не очень понятно так как последняя мне не доступна. Подозреваю структура поменялась за столько лет. Давно прошли времена когда была возможна только одна ФС. Нынче в линуксе выбираешь ФС какая тебе больше нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton шаблон RCWP. А что это? Что-то даже гугл не ищет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:37 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Алексей Роза 2020обязательно надо отметить, что сам код в C++ должен быть максимально простым и понятным То есть не использовать 99% этого языка, ограничиваясь "Си с объектами". Прелестно. не настолько ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:42 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Как модератор я ставлю вопрос о добавлении этих исходников в непотопляемый FAQ. Давайте уже 1 раз напишем эталонную реализацию и будем на нее ссылаться. я бы посмотрел на такую функцию У меня есть проблема в проекте. Нужно под Windows окружением определять размеры каталогов на кластерном файловом хранилище удаленно, но в пределах LAN (протокол SMB/Ethernet). Проблема в том, что скорость рекурсивного обхода каталога при использовании FindFirst/FindNextFile оставляет желать лучшего, если в каталоге довольно много (сотни тысяч) файлов/каталогов и (не)приличная глубина вложенности. Если полазить по всяким stackoverflow , то можно выяснить, что для Windows якобы ничего более производительного, чем использование указанных API функций, нет. Причем у этих функций есть Ex варианты , в которых можно указать ряд оптимизирующих флагов. Пробовал - мало толку, потому что все равно остается еще много лишнего мусора, который ОС тащит из NTFS. При этом не спасает даже то, что сам исследуемый каталог может находиться на суровом enterprise JBOD/RAID из SSD дисков. Была идея вынести рассчеты на локальный уровень посредством служб(ы), чтобы избежать overhead'a SMB протокола. Это реально дает прирост производительности, но все равно, не настолько насколько хотелось бы. А хотелось бы приблизиться к производительности Windows Explorer и идеале обойти его. В целом, если сравнивать мою наивную реализацию на FindFirst/FindNextFile и ту реализацию, которая используется в Explorer'e (открыть каталог, правой кнопкой мыши, посмотреть свойства), то создается впечатление, что Проводник не использует FindFirst/NextFile API, либо использует их как-то очень хитро, потому что производительность его рассчетов значительно превышает производительность указанных функций в моей реализации (проводил как-то анализ на "холодных" данных/кэше). Подозреваю, что придется нырнуть ближе к ядру и MFT, благо в MSDN много чего описано на этот счет, но пока руки не доходят... Если у кого есть подобный опыт, делитесь, будет интересно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:45 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav mayton шаблон RCWP. А что это? Что-то даже гугл не ищет. Замена условного оператора полиморфизмом. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 15:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrumесли сравнивать мою наивную реализацию на FindFirst/FindNextFile Так, может, ты её покажешь сначала? А то вдруг окажется, что ты наступил на что-то примитивное. Например, уходишь в рекурсию не дочитав текущий каталог до конца. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 16:02 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum Проблема в том, что скорость рекурсивного обхода каталога при использовании FindFirst/FindNextFile оставляет желать лучшего, если в каталоге довольно много (сотни тысяч) файлов/каталогов и (не)приличная глубина вложенности. кстати, вот в линухе с nfs тоже проблема непонятная - очень медленно работает... и copy, и всё остальное ну т.е. там нет даже близко 100мбит, даже когда их 1000 мбит ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 16:02 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Так, может, ты её покажешь сначала? А то вдруг окажется, что ты наступил на что-то примитивное. Например, уходишь в рекурсию не дочитав текущий каталог до конца. может и покажу, но пока нет особо времени на адаптацию кода. выкладывать вариант, который никто потестить не сможет, не вижу смысла но сразу скажу, что там нет ничего сверхестественного, все довольно примитивно: обходим каталоги, строим полный путь складывая имена каталогов с предыдущими сегментами путей, извлекаем размер файлов, накапливаем их в total size переменную. Все в рамках WinAPI, выше головы, как говорится, не прыгнешь ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 16:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 Cerebrum Проблема в том, что скорость рекурсивного обхода каталога при использовании FindFirst/FindNextFile оставляет желать лучшего, если в каталоге довольно много (сотни тысяч) файлов/каталогов и (не)приличная глубина вложенности. кстати, вот в линухе с nfs тоже проблема непонятная - очень медленно работает... и copy, и всё остальное ну т.е. там нет даже близко 100мбит, даже когда их 1000 мбит Какая версия nfs? Если для каждого файла мы используем 1 сетевой roundtrip то понятно что будет вычитка файлов медленно. Чтоб обсуждать тему детально - нужны описания условия эксперимента. Клиент. Сервер. И тестовый объем данных где это тестировалось. Убежден что в linux эта проблема архитектурно решена. Мы просто не слыхали об том как ее правильно решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
CerebrumВсе в рамках WinAPI, выше головы, как говорится, не прыгнешь Ну, как я уже говорил, можно уходить в рекурсию по каталогам сразу или складывать найденные каталоги в очередь чтобы обработать их позже, после завершения текущего. Второе эффективнее и позволяет попробовать распараллелить процесс. Также должен помочь упомянутый по ссылкам флаг большого чтения. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:33 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, FindFirst/FindNextFile этим я тоже сделаю рекурсивно, но только когда упрусь, в то, что в убунте не выходит как в K&R . ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:46 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Cerebrum, FindFirst/FindNextFile этим я тоже сделаю рекурсивно, но только когда упрусь, в то, что в убунте не выходит как в K&R . Покажи сорцы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81только когда упрусь, в то, что в убунте не выходит как в K&R . Там тебя ждёт сюрприз в виде понимания, что "размер каталога" и "размер файлов в каталоге" - две разные вещи. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 17:53 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81только когда упрусь, в то, что в убунте не выходит как в K&R . Там тебя ждёт сюрприз в виде понимания, что "размер каталога" и "размер файлов в каталоге" - две разные вещи. Не пугайте парня. Из сферы Unix(K&R, Linux, C). Можно посмотреть исходники утилиты tar и потрассировать ее работу в рантайме. Из всех утилит что работают с файловой системой она быстрее всех справляется с операциями слияния тысяч мелких файлов в один. Также и в обратку. Я спецом сравнивал ее с zip и другими тулзами и пришел к выводу что tar - самый быстрый на локальной файловой системе. Какие гвозди в него вбиты - надо разбираться. Но там будут многие ответы на вопросы по оптимизации. Из сферы Windows. Самая быстрая тулза для копирования россыпи файлов - это ntbackup.exe. Вот челлендж. Кто раскурит ее сорцы? ИЛи кто знает как она работает внутри. Там - тоже сакральное знание про NTFS. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:00 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov CerebrumВсе в рамках WinAPI, выше головы, как говорится, не прыгнешь Ну, как я уже говорил, можно уходить в рекурсию по каталогам сразу или складывать найденные каталоги в очередь чтобы обработать их позже, после завершения текущего. Второе эффективнее и позволяет попробовать распараллелить процесс. Можно пояснить почему вы считаете второй подход эффективнее? Он, наверное, был бы эффективнее если бы FindFirstFile() порождал бы в оперативке список всех файлов данного каталога. Но мне это кажется не верным. Или допустим эффективнее потому что все inode файлов данного каталога лежат на диске непрерывным вектором. По поводу распаралеливания -- ну тоже странно. Там узкое горлышко будет в дисковых операциях. Ну зачем тут паралелить? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:08 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton ИЛи кто знает как она работает внутри. индусы ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:16 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Алексей Роза 2020 пропущено... кстати, вот в линухе с nfs тоже проблема непонятная - очень медленно работает... и copy, и всё остальное ну т.е. там нет даже близко 100мбит, даже когда их 1000 мбит Какая версия nfs? Если для каждого файла мы используем 1 сетевой roundtrip то понятно что будет вычитка файлов медленно. Чтоб обсуждать тему детально - нужны описания условия эксперимента. Клиент. Сервер. И тестовый объем данных где это тестировалось. Убежден что в linux эта проблема архитектурно решена. Мы просто не слыхали об том как ее правильно решать. v4 или 4.1 эта проблема была ещё лет 15 назад у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs и чистая винда тоже быстрее а чё она решена? NFS 100 лет в обед. Сервер ставится и работает. Какие проблемы там решать столько лет?! Я могу конечно грешить на свои кривые руки... но блин, я поставил сервер, а он сходу еле копирует. И настраивать пытался. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:18 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 mayton пропущено... Какая версия nfs? Если для каждого файла мы используем 1 сетевой roundtrip то понятно что будет вычитка файлов медленно. Чтоб обсуждать тему детально - нужны описания условия эксперимента. Клиент. Сервер. И тестовый объем данных где это тестировалось. Убежден что в linux эта проблема архитектурно решена. Мы просто не слыхали об том как ее правильно решать. v4 или 4.1 эта проблема была ещё лет 15 назад у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs и чистая винда тоже быстрее а чё она решена? NFS 100 лет в обед. Сервер ставится и работает. Какие проблемы там решать столько лет?! Я могу конечно грешить на свои кривые руки... но блин, я поставил сервер, а он сходу еле копирует. И настраивать пытался. А здесь https://www.sql.ru/forum/linux спрашивал? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 эта проблема была ещё лет 15 назад у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs и чистая винда тоже быстрее а чё она решена? NFS 100 лет в обед. Так может драйвер NTFS под Линукс кривой? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:24 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Cerebrum, FindFirst/FindNextFile этим я тоже сделаю рекурсивно, но только когда упрусь, в то, что в убунте не выходит как в K&R . Код: plaintext 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:27 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravМожно пояснить почему вы считаете второй подход эффективнее? Он, наверное, был бы эффективнее если бы FindFirstFile() порождал бы в оперативке список всех файлов данного каталога. Наоборот, в этом-то случае он не будет иметь преимуществ. Но я исхожу из того, что каталог читается по частям с некоторым префетчем. И непосредственной рекурсией мы мало того, что порождаем тучу одновременно открытых дескрипторов, но и вымываем кэш. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:28 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81DIR* opendir(char* dirname); Ты зачем это всё объявляешь сам вместо "#include <dirent.h>"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:33 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81DIR* opendir(char* dirname); Ты зачем это всё объявляешь сам вместо "#include <dirent.h>"? потому что dirent.h я не включил и не в курсе о его существовании ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:35 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81DIR* opendir(char* dirname); Ты зачем это всё объявляешь сам вместо "#include <dirent.h>"? в том то и прикол их написать. в K&R и putc описывается и putchar и foef , это же тоже всё описано в stdio.h правда тут все вышло и проработано мною. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:45 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81потому что dirent.h я не включил и не в курсе о его существовании Требуемый заголовочный файл явно называется в начале (у man) или конце (у MSDN) страницы с описанием функции. Если ты не в курсе его существования, значит ты даже не пытался найти и прочитать документацию по используемым функциям. В морг. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:45 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, не пытался. я строго по книге. и до сих пор все удавалось пока не уперся в UNIX концепцию. история такова , что эти функции описываются. какая нафиг документация и dirent.h вы сырцы смотрите из книги K&R ! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 18:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, цель то не получить результат любой ценой , а понять реализацию этих функций из dirent.h . а для этого сырцы должны работать , а в этом проблема , они заточены только под Юникс. А функции, да оказывается описаны. наверно и под винды адаптированы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, по этой теме не поймем мы тебя, как и ты нас. Ты считаешь истиной книгу 40-летней давности, когда всей индустрии всего лет 60 с небольшим. Ты полностью согласен со своими взглядами в 15 лет? Ну вот и тут также, есть ошибки молодости, их давно исправили, но эту книгу никто переписывать не стал. Считаешь что должен что-то сделать по этому поводу - просто возьми и сделай. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:17 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, ты упёрся не UNIX концепцию а в Linux концепцию. Чтение директории в линуксе выполняется через системный вызов. getdents Ну или через API оборачивающий системные вызовы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:25 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Несколько code-review points. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Функции подобные strlen, strcmp имеют линейный расчет сложности. Тоесть чем длиннее строка тем они дольше делают перемотку вперед. 2х гигабайтная строка будет считаться несколько секунд. Примерно как memory тест при старте старых комьютеров. Когда черный экран Биоса нам освящает загрузку. Особенность сишных строк чорт бы их подрал. Злобные любители Паскаля здесь хохочут над нами. И они правы. И хотя современные процессоры достаточно шустры - я-бы по возможности вообще-бы старался схильнуть с этих функций. В данных двух предикатах нам вообще не нужно сравнивать строки. Нам нужно выпрыгнуть наверх из цикла как только текущий item это "." или ".." Я-бы сравнил что первый символ точка или второй. Код: plaintext 1. 2.
Предварительно проверив что строка по длине больше чем 2 символа. Или 1 Или наоборот проверил сначала второй. Код: plaintext 1.
Подумай зачем нужны строковые функции здесь. Может не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:40 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Эта строка - медленный покемон. Код: plaintext 1.
По возможности старайся не использовать форматный printf если формула - простая. А у тебя идет просто конкатенация двух строк через разделитель. По моему есть strcat. Ну или подумай как не делать лишних движений. Или вообще не конкатенировать ничего. Передавай их так в lazy-style. Вобщем если-б ты программировал на языках ФП - то понял-бы меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:46 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Я не понимаю этот код. Код: plaintext 1. 2.
Что за ограничение name too long? Давайте откроем спеку современных файловых систем. Windows кажется в Unicode гарантирует путя до 64к символов. Кажется UNC называется. А эту проверку - к чорту. Я не понимаю такого ограничения. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:53 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Не понимаю. Код: plaintext 1.
dirwalk должен быть рекурсивным. Должен вызывать сам себя с локальными под-каталогами. Семантика их должна быть - как относительные путя относительно текущего объекта представляющего folder. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 19:56 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Друзья. С++ ники. А вы проверяете malloc на NULL? Код: plaintext 1.
Я - никогда. Я не знаю какие решения можно принять в рантайме после получения такого события. В некотором смысле - это фатально. Это на уровне .... пожара или потопа в серверной. Возможно программисты 20-го века и делали подобные проверки. И проверяли прерывания сбоя чётности оперативной памяти. Но в наше время мне кажется эту архитектуру надо разделить на разные слои отвественности. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:02 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Друзья. С++ ники. А вы проверяете malloc на NULL? Каверзный вопрос. В С++ надо new использовать, а он если что исключение выбросит. А в современном коде и new уже излишен, в STL есть много чего чтобы явно new не вызывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:16 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Я - никогда. Я не знаю какие решения можно принять в рантайме после получения такого события. В некотором смысле - это фатально. Это на уровне .... пожара или потопа в серверной. При разработке какого-нибудь высоконагруженного сервиса, который выжимает максимум из железа, почему бы и нет? Реакция зависит... ну от задачи, например. Но я не пишу таких программ. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav mayton Я - никогда. Я не знаю какие решения можно принять в рантайме после получения такого события. В некотором смысле - это фатально. Это на уровне .... пожара или потопа в серверной. При разработке какого-нибудь высоконагруженного сервиса, который выжимает максимум из железа, почему бы и нет? Реакция зависит... ну от задачи, например. Но я не пишу таких программ. :) Возможно в embed. Но для современного процесса в современной ОС... это просто смерть без вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, А в embed, которую я наблюдаю, там такой проблемы не возникает. Памяти или хватает, или нет. Там просто, проверил на NULL, если не выделилась, то устройство просто не работает, выход из main() и всё. Или вообще запрещена динамическая память. Но если разрешена, то она вся выделяется при старте приложения (один раз без free() и realoc()). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:41 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, попинали код с позиции современного профи . я бы с радостью замечания все учел, если бы мог отлаживать код, а так лишь бы и это заработало и разобраться что тут к чему. функций много глаза разбегаются. )) Оптимизация это уже второй вопрос. void dirwalk(char* dir, void (*fcn)(char*)) dirwalk должен быть рекурсивным. ну тут fsize вызывает dirwalk, а dirwalk может вызвать fsize и понеслась... в общем связаны они с друг другом рекурсивно. ну это суровый K&R так и читаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:46 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Но для современного процесса в современной ОС... это просто смерть без вариантов. почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 20:48 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, Проблема не в проверке,а в ревкции на null ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:08 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton Но для современного процесса в современной ОС... это просто смерть без вариантов. почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста? А потому что Майтун мыслит в категориях программиста на высокоуровневых языка. Вот он запускает веб-сервис, запускает стресс-тестирование, смотрит монитор нагрузки -- ага всё в своп-ушло, отказов в обслуживании дофигища. Чёта не по бизнес требованиям выходит. Ну и корректирует настройки сервиса: уменьшить количество одновременных подключений. Пишет заявку: увеличить оперативку. Это упрощённо. Для него очень много делает фреймворк, который как раз проверяет на NULL. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton Но для современного процесса в современной ОС... это просто смерть без вариантов. почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста? Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать? Можно не проверять, но если вернется указатель на NULL, то при попытке прочитать по этому указателю прога вылетит, читай умрет. PS ИМХО необработанное исключение от new полезней, тут хотя бы деструкторы отработают. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:18 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 пропущено... почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста? Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать? Отказываться работать, вот что делать. Пишем свой Фотошоп. Два варианта на открытии файла: - Не хватило памяти. - Файл неверного формата. MsgBox(). В случае вебсервиса -- отказ в обслуживании, держитесь там, заходите позжее. Dima T PS ИМХО необработанное исключение от new полезней, тут хотя бы деструкторы отработают. А потом оно упадёт на необработанном исключении. Очень круто. Да и не стоит примешивать обработку ошибок и работу с памятью. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:24 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton Но для современного процесса в современной ОС... это просто смерть без вариантов. почему проверка malloc на нулл это смерть сейчас ??? поясните более доступным языком, пожалуйста? Потому что не существует никакого ценного принятия решения по этому поводу. Давай порассуждаем. Ты написал приложение. Бизнес-приложение. Которое выполняет полезную работу. И вдруг. На каком-то этапе приложение не может аллоцировать память. Работа дальше заблокирована. Давай придумай какой-то план выхода из этой ситуации и мы обсудим насколько он реалистичен. Напомню что приложение - это не привет-мир. Это бизнес-приложение которое обычно держит несколько сотен сетевых коннектов к базам и сервисам и в режиме event-driven реагирует на бизнес события сети. И эта активность - не прекращается. Обсуждать системные утилиты мне неинтересно т.к. их % ничтожно мал в общей массе софта который мы разрабатываем за деньги каждый день. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, сложный вопрос для меня от человека умудренного опытом. ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:46 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Из сферы Unix(K&R, Linux, C). Можно посмотреть исходники утилиты tar и потрассировать ее работу в рантайме. Из всех утилит что работают с файловой системой она быстрее всех справляется с операциями слияния тысяч мелких файлов в один. Также и в обратку. Я спецом сравнивал ее с zip и другими тулзами и пришел к выводу что tar - самый быстрый на локальной файловой системе. Какие гвозди в него вбиты - надо разбираться. Но там будут многие ответы на вопросы по оптимизации. Я решил сделать для начала не tar а du (DiskUsage). Он не копирует а просто обходит структуру фолдеров. Вот что получилось по системным вызовам. Запускал по своему /home каталогу Фрагмент лога strace Код: plaintext 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.
Ожидаю ваших активных комментариев. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:54 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, сложный вопрос для меня от человека умудренного опытом. ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход. Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии. Более того. Даже сама процедура аварийного выхода может не сработать т.к. ей для корректного завершения (!) сюрприз тоже может понадобиться память. Ведь если ты пишешь качественное бизнес-приложение - ты обязан закрыть корректно все курсоры в БД. Завершить транзакции в деструкторах твоих бизнес-процессов. Вот поэтому для многих языков-платформеров нет никакой адекватной реакции на OutOfMemory exception. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 21:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, сложный вопрос для меня от человека умудренного опытом. ну в данном случае наверно высвечиваем "нехватка памяти для размещения структуры DIR и сливаем эту фразу в лог, а затем выход. Конечно. Так и делают библиотеки на которые опирается Майтун. А он, соответственно, не знает как реагировать на ситуации, которые отрабатывает базовая библиотека. Из этого делается вывод: на эти ситуации отреагировать невозможно. Но вывод ошибочный. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 22:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Вообще я вот думаю наверно надо как советовал злой Сибиряков: забить болт на реализацию readdir, opendir и closedir. Воспользоваться ими из библиотеки и закрыть тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2020, 22:52 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать? отобрать у другой программы, очевидно же весь мир так устроен, чё велосипед изобретать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 04:57 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Алексей Роза 2020 пропущено... v4 или 4.1 эта проблема была ещё лет 15 назад у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs и чистая винда тоже быстрее а чё она решена? NFS 100 лет в обед. Сервер ставится и работает. Какие проблемы там решать столько лет?! Я могу конечно грешить на свои кривые руки... но блин, я поставил сервер, а он сходу еле копирует. И настраивать пытался. А здесь https://www.sql.ru/forum/linux спрашивал? я гуглил, а эта проблема так то распространённая у меня он 1.8гб файл копирует быстро до 50%, а потом еле-еле, практически виснет винда в/на самбу его скопирует за неск. секунд petrav Алексей Роза 2020 эта проблема была ещё лет 15 назад у меня реально линух с/на самбу копирует быстрее, чем линух с/на nfs и чистая винда тоже быстрее а чё она решена? NFS 100 лет в обед. Так может драйвер NTFS под Линукс кривой? так он же в ядре? Ну у меня убунта, какой там кривой драйвер... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 05:06 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Функции подобные strlen, strcmp имеют линейный расчет сложности. Тоесть чем длиннее строка тем они дольше делают перемотку вперед. 2х гигабайтная строка будет считаться несколько секунд. Примерно как memory тест при старте старых комьютеров. Когда черный экран Биоса нам освящает загрузку. Особенность сишных строк чорт бы их подрал. Злобные любители Паскаля здесь хохочут над нами. И они правы. а в паскале как? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 06:07 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton ntbackup.exe. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 06:08 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Ожидаю ваших активных комментариев. ты тоже Dmitriy? mayton Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии. а чё вы со свопом сделали, м? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 06:17 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Бизнес-приложение. Которое выполняет полезную работу. И вдруг. На каком-то этапе приложение не может аллоцировать память. Работа дальше заблокирована. P.S. Точка - не единственный знак препинания.Приложение выполняет полезную работу и вдруг, на каком-то этапе, не может выделить память. Всё - дальше работа заблокирована. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 06:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 Dima T Все банально: программа попросила выделить кусочек памяти, а в ответ - нельзя, нет свободной памяти. И что дальше делать если без этого кусочка нельзя дальше работать? отобрать у другой программы, очевидно же весь мир так устроен, чё велосипед изобретать Микроконтроллер? У кого отберёт? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 07:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 mayton Ожидаю ваших активных комментариев. ты тоже Dmitriy? mayton Верно. Все что мы можем сделать - это вывалиться с сообщением об аварии. а чё вы со свопом сделали, м? Мы рассматриваем сферический C в вакууме. И уровень туториалов бедняги Андрона. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 07:27 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
По поводу утилиты disk usage. Кто имеет комментарии? Эксперты мои дорогие... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 07:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Даже сама процедура аварийного выхода может не сработать т.к. ей для корректного завершения (!) сюрприз тоже может понадобиться память. да ладно ? мы ж отвалились по условию malloc == null то есть память не аллоцировалась, а значит свободна . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 08:04 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 malloc == null то есть память не аллоцировалась, а значит свободна . Странная логика. Память не аллоцировалась потому что ее нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 08:14 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dima T andron81 malloc == null то есть память не аллоцировалась, а значит свободна . Странная логика. Память не аллоцировалась потому что ее нет. скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 08:18 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Алексей Роза 2020 mayton Функции подобные strlen, strcmp имеют линейный расчет сложности. Тоесть чем длиннее строка тем они дольше делают перемотку вперед. 2х гигабайтная строка будет считаться несколько секунд. Примерно как memory тест при старте старых комьютеров. Когда черный экран Биоса нам освящает загрузку. Особенность сишных строк чорт бы их подрал. Злобные любители Паскаля здесь хохочут над нами. И они правы. а в паскале как? Там разные строки были. Был вариант с хранением длины. Как в std::string. И был вариант pchar это наподобие сишных ASCIIZ. И кажется еще было несколько библиотечных вариантов. Ну в основном использовался первый вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:05 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Dima T пропущено... Странная логика. Память не аллоцировалась потому что ее нет. скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит . Да. Для девопсовской или админской задачи такой вариант подходит. Приложение не взлетело при старте. Админ зашел в конфигурацию. И вместо size=20G указал size=14G к примеру и всё стартовало успешно. Но на практике, подобные пробирующие алгоритмы не работают потому что память нужна срочно и многим работающим потокам. И если уже дошло до того что приложение работало несколько месяцев и вдруг не смогло выделить память - то всё очень плохо и вот эта игра на понижение... или этот торг ну окей я не смог взять 20Гиг так возьму 20 минус 500 метров - уже не очень полезен. Где-то есть утечка. Надо разбираться. Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется что вобщем-то никаких. Можем просто падать с сообщением в STDERR. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:15 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton andron81 пропущено... скажем я запросил аллоцировать 20Г, а свободно 500Мб. malloc выдал null. ну наверно ж 500Мб на то чтобы выдать сообщение хватит . Да. Для девопсовской или админской задачи такой вариант подходит. Приложение не взлетело при старте. Админ зашел в конфигурацию. И вместо size=20G указал size=14G к примеру и всё стартовало успешно. Но на практике, подобные пробирующие алгоритмы не работают потому что память нужна срочно и многим работающим потокам. И если уже дошло до того что приложение работало несколько месяцев и вдруг не смогло выделить память - то всё очень плохо и вот эта игра на понижение... или этот торг ну окей я не смог взять 20Гиг так возьму 20 минус 500 метров - уже не очень полезен. Где-то есть утечка. Надо разбираться. Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется что вобщем-то никаких. Можем просто падать с сообщением в STDERR. много чего хочу , но больше на данный момент хочу сделать первичную задачу. и ещё хочу её потом реализовать посредством findFirst для спортивного интереса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:27 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, у меня какие-то приступы энтузиазма на старости лет. вот к примеру книги читаю 40 летней давности:) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Был вариант с хранением длины. так а длина не через strlen() вычислялась? Или тут strlen() в цикле? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Хочешь я в нашем форуме просто ради прикола подниму штук 10 старых топиков где есть malloc и мы просто обсудим какие умные принятия решения можно сделать именно здесь и сейчас в исходнике? И окажется что вобщем-то никаких. Можем просто падать с сообщением в STDERR. Я хочу, поднимите один топик, для начала. PS: И не падать, а корректно выходить, тоже вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 09:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Алексей Роза 2020 пропущено... а в паскале как? Там разные строки были. Был вариант с хранением длины. Как в std::string. И был вариант pchar это наподобие сишных ASCIIZ. И кажется еще было несколько библиотечных вариантов. Ну в основном использовался первый вариант. Я помню классный был тип строки в Паскале. Он хранил длину в байте. И строки не могли быть длине 255. А вот где данные хранились - в самом типе или в динамике я не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 10:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Да. Точно. 255. В информатике и выч-технике 20-го века это число - магическое. Во многих приложениях и сетевых протоколах это число заложено как лимит. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 10:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav А вот где данные хранились - в самом типе или в динамике я не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 11:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
По поводу сорцов du (DiskUsage) я нашел один вариант здесь В составе GNU Core Utilities https://github.com/coreutils/coreutils ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 11:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonНо на практике, подобные пробирующие алгоритмы не работают потому что память нужна срочно и многим работающим потокам. Так вопрос-то стоит не "кому нужна память", а "зачем нужна память". В попытке ответа на него обычно вылазит "вектор на миллиард". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 12:43 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
disclaimer: * код написан на коленке и не претендует на звание best code ever * 100% содержит ряд багов (и я даже знаю где), но, в целом, показывает подход и пригоден для исследования производительности, и последующего устранения узких мест, т.е. служит некой отправной точкой для желающих заморочится * не поддерживает точки монтирования/hardlinks в каталогах * не будет работать правильно (без доработки напильником), если натравить на C:\windows или корневой каталог тома. В Windows есть каталоги, на которые у вас нет прав :) * обработка ошибок удалена для краткости h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
cpp (портянка) Код: plaintext 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172.
Диагностику снял с локального каталога на SSD, в первую очередь чтобы показать, что основная масса рассчетов/задержек приходится на kernel функцию FindFirstFile, а не на промахи кэша (но они безусловно есть, но их устранение - это экономия на спичках, имхо) Чуть позже натравлю на каталог покрупнее по сети ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 13:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, спасибо большое за труд. А в вижуалах проект должен иметь еще один файлик... эээ. Build-file? Или какой-то make-file? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 13:43 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton А в вижуалах проект должен иметь еще один файлик... эээ. Build-file? Или какой-то make-file? достаточно просто создать пустой Win32 проект и прикрепить к нему эти файлы. в cpp есть функция main, ее код можно уже писать как вам удобно, я привел ее для только как образец выставить в настройках только не забудьте компиляцию с поддержкой C++17 (у меня VS2019) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 13:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
анализ этим же кодом более объемного каталога по сети (SMB/SSD/Windows Server 2019/LAN1Gb) в каталоге: 78 Files, 312 237 Folders объем: 465 MB (487 739 392 bytes) время: 3 минуты 19 секунд !!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:44 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum время: 3 минуты 19 секунд !!!! Судя по профилю, одно только убирание избыточной проверки на существование из calc_directory_size() сократит время на четверть. Ну и итерации вместо рекурсии таки попробуй. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:54 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, повтори эксперимент после рестарта операционки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Cerebrum, повтори эксперимент после рестарта операционки. с которой я обращаюсь на удаленку или удаленку? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Непонятно зачем нам проверять что директория существует? Хм. Как-то избыточно. Следующая-же транзакция пойдет по следам и все равно проверит. Это как проверять что в БД таблица существует перед чтением. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:02 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov убирание избыточной проверки на существование из calc_directory_size() сократит время на четверть. попробуем по субъективным ощущениям (замерить мне их нечем) Total Commander анализирует этот же каталог примерно за то же самое время как и мой код Проводник делает это раза в 3 быстрее плюс / минус Представьте что у вас облачный сервис, в котором клиент хранит свои данные, а ля OneDrive. Он заходит в личный кабинет, где у него должен отобразиться объем занятого его файлами места. Сайт отправляет команду вашей службе и та начинает пилить его диск в течение 3-4 минут! За это время, сколько раз клиент, подумав что браузер завис, начнет эту операцию заново? Короче весело... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:03 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum mayton Cerebrum, повтори эксперимент после рестарта операционки. с которой я обращаюсь на удаленку или удаленку? На той на которой ты делаешь дисковые операции. Я думаю что NTFS - умная система. И она - минимизирует физические чтения областей каталогов. И этот механизм можно сбить либо размонтированием тома. И снова монтированием. Что болезненно. И опасно. Либо перезагрузкой. Что проще. Я имею в виду что серия экспериментов будет иметь визуальный вид улучшения результатов. Что само по себе - фейк. В продуктовой задаче иногда бывает важен самый первый запуск джоба. И его измерения будут эталоном. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:05 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Непонятно зачем нам проверять что директория существует? Хм. Как-то избыточно. Следующая-же транзакция пойдет по следам и все равно проверит. Это как проверять что в БД таблица существует перед чтением. с этим никто не спорит, но представим что у нас первая итерация вызова calc_directory_size и указанный каталог не существует, получается что вместо этой проверки достанется по мозгам менеджеру памяти, который будет вынужен сначала построить нам правильную строку для FindFirstFile в utils::findfile_path_builder. То есть вся эта работа будет проведена в пустую, а если принять во внимание, что таких запросов ваша служба может получить сразу несколько или параллельно выполнять что-то тяжелое с памятью, то такое дерганиье менеджера памяти автоматически тормозит на аллокации все потоки в службе. Context Switching однако Понятно, что надо оценить что более трудозатратно с точки зрения ОС: дернуть память пару раз или один раз сходить проверить существует ли каталог по сети. Как уже ответил, я попробую убрать данную проверку и повторить замеры ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:10 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton На той на которой ты делаешь дисковые операции. Я думаю что NTFS - умная система. И она - минимизирует физические чтения областей каталогов. И этот механизм можно сбить либо размонтированием тома. И снова монтированием. Что болезненно. И опасно. Либо перезагрузкой. Что проще. перезагружу, не вопрос. просто я без перезагрузки попробовал после себя Total Commdander'ом и ему это не особо помогло что данные горячие. Я думаю, что это более актуальнее для локальный операций, дисковый кэш, а тут у нас имеется посредник в виде SMB и исполнитель команды не знает что там, на той стороне за ФС, поэтому, ему тяжелее делать какие-то кэш оптимизации дисковых операций. но перезагрузить попробую. Собственно первый мой замер по сети был на холодную ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Что болезненно. И опасно. Либо перезагрузкой. Что проще. Ню-ню Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:15 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
(Разводя руками) На современных ноутах Windows часто стоит 1 системный раздел. Вот я и исхожу из такого Пареттовского предположения. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:19 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton предположения "Предположение - мать всех провалов" Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:27 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov убирание избыточной проверки на существование из calc_directory_size() сократит время на четверть. убрал проверку, файловый сервер перезагружен ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, зачем нам SHRINK? Он нам в топике ненужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrumубрал проверку Не четверть, но тоже неплохо. Теперь надо переводить на итерации и пробовать параллельное чтение. Вариантов два: 1) Каждый FindFirst/Next создаёт отдельный round-trip на сервер, параллельное чтение будет рулить со страшной силой; 2) Результаты сканирования передаются по SMB пачками, параллельное чтение ухудшит ситуацию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum За это время, сколько раз клиент, подумав что браузер завис, начнет эту операцию заново? Короче весело... а если он просто F5 зажмёт? Вам в другую сторону копать надо бы ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:38 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, нам нужны выводы. Стало меньше. Что повлияло. Убирание exist? ИЛи ребут. Нужно еще хотя-бы 2 измерения чтоб устаканить величину. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:39 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum представим что у нас первая итерация вызова calc_directory_size и указанный каталог не существует, получается что вместо этой проверки достанется по мозгам менеджеру памяти, который будет вынужен сначала построить нам правильную строку для FindFirstFile в utils::findfile_path_builder. То есть вся эта работа будет проведена в пустую, а если принять во внимание, что таких запросов ваша служба может получить сразу несколько или параллельно выполнять что-то тяжелое с памятью, то такое дерганиье менеджера памяти автоматически тормозит на аллокации все потоки в службе. Предлагаю отказаться от динамической памяти при построении пути к файлам. Вам хватит одного массива "char[64 кбайт]". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:40 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Он нам в топике ненужен Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:42 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Cerebrum, нам нужны выводы. Стало меньше. Что повлияло. Убирание exist? ИЛи ребут. Нужно еще хотя-бы 2 измерения чтоб устаканить величину. все написал. повлияло удаление проверки как и предлогали перезагрузка сервера выполнена сделаю позже, обеденный перерыв закончился ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton Он нам в топике ненужен Хотя, с другой стороны, если отдельный том вам не нравится, то существует виртуальный диск, который легко создать и перемонтировать с гарантированным сбросом кэша. Вася яж не спорю. Можно. Просто я предлагаю эксперимент который любой может провести на ноуте. А ты предлагаешь эксперимент которые требует предусловия которые не у всех есть. Требует наличия свободного места. Требует выполнения админских действий которые не все хотят делать. Да и я не советую. Просто последствия от ошибочных действий с диском - очень печальные. И иногда не восстанавливаются. И я в топике не беру ответсвенность за такое. Хочешь - дирижируй шринком. Дай всем инструкции. Я не хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу? Не эффективнее ли будет менять текущий каталог? Ведь вы же заставляете ОС каждый раз пройтись по полному пути от корня. Или поскольку это многопользовательский сервис, то делать этого нельзя? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:49 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav Вам хватит одного массива "char[64 кбайт]". как вариант, но пока мест выделения памяти довольно много и придется много где поменять логику, что скажется отрицательно, с точки зрения читабельности кода но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Пока в топе функций не светятся new/delete этим можно не заморачиваться. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Ну человек почему-то переживал по поводу менеджера памяти. Если я правильно понял его. В принципе сотни тысяч аллокаций... если от них элементарно отказаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПредлагаю отказаться от динамической памяти при построении пути к файлам Пока в топе функций не светятся new/delete этим можно не заморачиваться. Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav Кстати, а зачем вы вообще в "utils::findfile_path_builder" строите полный путь к файлу? это требование FindFirstFile, ей нужна маска, а не просто путь, тк она вся из себя гибкая и универсальная. Когда я строю путь, по нему от корня никто не проходит, выполняется лишь декорирование пути под маску. Использование одной и той же переменной в качестве хранилища памяти строки было бы предпочтительно, но для дальнейших итераций путь-маска сгенерированная в данной функции не подходит для последующих итераций. Его приходится разбирать и собирать заново. Это мы с вами знаем что нам здесь можно было бы подшаманить, но я стараюсь писать более менее универсальный код, который бы мог использоваться в разных местах, отсюда неизбежно чем-то приходится жертвовать ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:56 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Судя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. все верно, данная ф-ция устроена в Windows так, что она делает упреждающее чтение всегда, то есть всегда забивает некий кэш списком файлов, чтобы десять раз не бегать. Именно об этом и говорят оптимизирующий флаги, которые я использовал в Ex версии. Условно я разрешил ОС использовать больше память под кэш упреждающего чтения ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 15:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravНе эффективнее ли будет менять текущий каталог? Сугубо без разницы. Но побочные эффекты злее. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:04 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonСудя по профилировщику мы долго ожидаем функцию FindFirst. Это получение итератора на список файлов в каталоге NTFS. Если учесть, что NTFS построена в виде B-tree, этот итератор нетривиален, как и его получение. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:11 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Если мы дерево каталогов разрежем на уровень 1 и все остальные 2,3,4,...e.t.c то у нас получается ключ группы и его значения. Дальше - можно попробовать map-reduce на этом дереве. Но хотя-бы в 2 потока. Почему в 2 потока? Ну... диск и так нагружен. Можем только выиграть на процессорных операциях которые делают всякую логику типа там хождения по структуре B-дерева каталога и проверку ACL. Ведь формула подсчета size директорий идеально ложиться на шаблон map-reduce. Ну что господа сишники? Осилим мы такой подход? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum, >но с производительностью всегда так, либо код понятный и медленный, либо черт ногу сломит и все более быстро == да)) Смотря что надо _прикладному коду_ выше уровнем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravНе эффективнее ли будет менять текущий каталог? Сугубо без разницы. Но побочные эффекты злее. Но почему? Смотрите: мы в FindFirst() передаём полный путь и эта фигня бежит по всему дереву, по каждой подпапке, проверяет существование и права доступа. А если мы изменим текущий каталог, то мы работаем в текущей песочнице. Плюс динамические строки отваливаются вообще элементарно. Сотни тысяч операций не выполняются. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:17 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице. Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:26 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Разумно поручить системе всё, что упрощает прикладной код, пока это укладывается в требования эффективности? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:31 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА если мы изменим текущий каталог, то мы работаем в текущей песочнице. Система, получив относительный путь в FindFirst, переводит его в абсолютный и задача сводится к той, что выше. Почему вы так решили? Мне кажется это было бы бессмысленным. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:36 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Cerebrum ... В целом, если сравнивать мою наивную реализацию на FindFirst/FindNextFile и ту реализацию, которая используется в Explorer'e (открыть каталог, правой кнопкой мыши, посмотреть свойства), то создается впечатление, что Проводник не использует FindFirst/NextFile API, либо использует их как-то очень хитро, потому что производительность его рассчетов значительно превышает производительность указанных функций в моей реализации (проводил как-то анализ на "холодных" данных/кэше). ... как вариант, можно натравить IDA на cmd и посмотреть как там сделано. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 16:59 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravПочему вы так решили? потому что это написано в документации работы относительных путей. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 17:20 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Ну и дополнительно на это намекает MSDNIf the string ends with a wildcard, period (.), or directory name, the user must have access permissions to the root and all subdirectories on the path. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 17:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПочему вы так решили? потому что это написано в документации работы относительных путей. Хотелось бы, конечно, ссылочку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:07 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petravХотелось бы, конечно, ссылочку. Так почему бы не спросить у гугля? Он честно выдаёт https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#path-normalization Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 21:34 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, в общем накатил я это все в убунту, сделав папку 123 сишный файл a1.c прилагаю. делаю: gcc -o myprog a1.c ./myprog 123 вывод : read bytes=-1 read bytes=-1 Этот вывод я поставил в readdir (см. исходник) таким образом все работает пока не доходит до readdir. при этом opendir отрабатывает. похоже тут все же не отрабатывает read для каталога . Получается , что в линухе все ж файловая система отлична от юниксовой. Код: plaintext 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 15:38 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 Получается , что в линухе все ж файловая система отлична от юниксовой. А ты все ФС проверил ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 15:44 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81, классно но вот мне вот это не нравится Код: plaintext 1.
Почему 14 ? Таких лимитов уже давно нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 15:55 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonПочему 14 ? Чтоб сегфолт получить за несоотвествие объявления и реализации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 15:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, ok поставлю 255. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 15:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, ok поставлю 255. Давай почитаем что там. В убунтах в дефолнтной установке под системный раздел ставится ext4. Что у нее по limitations? Начну отсюда. https://en.wikipedia.org/wiki/Ext4 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton andron81 mayton, ok поставлю 255. Давай почитаем что там. В убунтах в дефолнтной установке под системный раздел ставится ext4. Что у нее по limitations? Начну отсюда. https://en.wikipedia.org/wiki/Ext4 Max. filename length = 255 угадал ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:05 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton пропущено... Давай почитаем что там. В убунтах в дефолнтной установке под системный раздел ставится ext4. Что у нее по limitations? Начну отсюда. https://en.wikipedia.org/wiki/Ext4 Max. filename length = 255 угадал ? Не спеши. Надо понять какие размерности имеются в виду. NTFS декларирует имя узла лимитом в chars. Тоесть национальные символы уже учтены. А ext4 - байтах. А если - национальные символы? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:09 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
maytonА ext4 - байтах. А если - национальные символы? Линуксу пофиг, у него в именах файлов нет символов, только байты. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:13 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Да но вот Андрон пишет код. И выделяет там chars. Bytes и Chars. Килограммы и фунты. Литры и галлоны. Не придем мы к одинаковому пониманию. А по поводу длины Path. В ext4 есть лимит на число вложенностей (примерно 64000). А на длину путя вообще сняты все ограничения. Так-что вы господа если хотите с гарантией хранить путь в этой файловой системе - то озадачтесь таким буфером чтоб на все хватило. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:16 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, А почему ж есть ограничение вложенности? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:19 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton Не спеши. Надо понять какие размерности имеются в виду. NTFS декларирует имя узла лимитом в chars. Тоесть национальные символы уже учтены. А ext4 - байтах. А если - национальные символы? ntfs какое отношение имеет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:29 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
petrav А почему ж есть ограничение вложенности? 64000 - это как бы и не ограничение вовсе... где их столько набрать ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
техническое ИМХО. Надож было что-то написать. Не бесконечность же ставить. Хотя вот в ext3 было в два раза меньше. Значит что-то специально изменяли. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:44 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton техническое ИМХО. Надож было что-то написать. Не бесконечность же ставить. Хотя вот в ext3 было в два раза меньше. Значит что-то специально изменяли. Техническое было бы 2 32 или 2 64 . Это если для работы зачем-то нужно знать текущий уровень вложенности. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 16:51 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, ok поставлю 255. В линуксе нет UFS. Прочитай ещё раз внимательно мой предыдущий комментарий. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:47 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
mayton, Это все не очень важно. Если у меня проблема, что папка не читается как файл: read возвращает (- 1) . ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:56 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81 mayton, Это все не очень важно. Если у меня проблема, что папка не читается как файл: read возвращает - 1. Мы потом твою утилиту протестируем. Посчитаем на толстом диске все файлы. Кстати где ты плюсуешь размер? И кстати ты различаешь 2 типа сущностей. Все что является S_ISDIR и все остальное. Но вот все остальные типы (классы) файлов не всегда являются файлами. И если вести суммарный подсчет их занимаемого места - то наверное надо подходить индивидуально. Например как считать сим-линк? Плюсовать его место или нет? Да много там чего. Вобщем не такое простое это дело. Кстати логический размер файла в Linux может превышать размер доступного места в файловой системе. И это безо всяких техник архивации. Это - штатная возможность. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:08 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81Если у меня проблема, что папка не читается как файл: read возвращает (- 1) . Она и не должна читаться. Кто тебе сказал обратное? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:58 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81Если у меня проблема, что папка не читается как файл: read возвращает (- 1) . Она и не должна читаться. Кто тебе сказал обратное? K&r вот кто ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 19:21 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81K&r вот кто Не верю! (с) Походу, ты сделал несколько опечаток, когда вместо fstat напечатал read... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 20:08 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81K&r вот кто Не верю! (с) Походу, ты сделал несколько опечаток, когда вместо fstat напечатал read... это ж в каком состоянии надо быть чтобы так опечататься ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 21:12 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81это ж в каком состоянии надо быть чтобы так опечататься ? Да, в общем-то, в типичном для тех времён. "На весь мир требуется не более полудюжины компьютеров." Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:00 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov andron81это ж в каком состоянии надо быть чтобы так опечататься ? Да, в общем-то, в типичном для тех времён. "На весь мир требуется не более полудюжины компьютеров." хочешь сказать там опечатка ? тогда как тут должен выглядеть тут код ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:01 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
andron81хочешь сказать там опечатка ? Я хочу сказать, что этот код был способен работать на единственной версии единственной операционки, установленной на единственном компьютере. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:04 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
а как тогда этот код попал в 2020? тьфу, из книжки штоле?! да сколько можно уже ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 22:32 |
|
папка это файл?
|
|||
---|---|---|---|
#18+
финдфирстом / финднекстом удалось сделать ! на обычных папках всё верно, а вот на папках типа Windows и Program Files получается неверно... га*нокод мой таков : Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 14:32 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017328]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
176ms |
get tp. blocked users: |
2ms |
others: | 287ms |
total: | 542ms |
0 / 0 |