|
папка это файл?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=57&msg=39997068&tid=2017328]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 152ms |
0 / 0 |