• Не получается вернуть строку. Как исправить?

    @res2001
    Developer, ex-admin
    1. Лучше бы вы использовали std::string, а не нативные ("сырые") строки.
    2. Нативные строки - это не строки в привычном для С++ смысле (и в смысле интерпретируемых ЯП). У них нет встроенных операций типа конкатенации, выделения подстрок и т.п. Все это реализуется функциями в стиле Си str*
    3. Если вы хотите вернуть сырую строку, то надо:
    3.1. Массив под строку выделять в динамической памяти (или передавать его как параметр в функцию и его заполнять). Сейчас у вас автоматический массив, а он исчезнет, как только отработает оператор return и строка по факту не вернется (хотя вернется указатель, но он будет указывать в место на стеке, в котором уже нет вашей строки).
    3.2. Возвращать char*. Сейчас тип возвращаемого значения в вашей функции char - а это один символ, а не строка.
    4. Размер строки явно будет больше, чем size байт. На сколько больше - нельзя сказать заранее. Поэтому обычно выделяют достаточно большой буфер с запасом, чтоб покрыть все возможные варианты и при добавлении в буфер очередной подстроки контролируют размер буфера - чтоб оставалось место для очередной добавляемого куска и завершающего нулевого символа. Строка может быть равна size только в случае, если все числа в массиве будут состоять из одной десятичной цифры. Да и в этом случае требуется дополнительный байт на нулевой символ. Так что минимальный размер буфера должен быть size+1, реально он должен быть еще больше.
    Ответ написан
    Комментировать
  • Кроссплатформенное программирование на C?

    @res2001
    Developer, ex-admin
    Тут не важно GUI или нет (может быть любой интерфейс - сеть, файлы, потоки, процессы, и т.п. системные интерфейсы). Подход один и тот же. Если нужна кроссплатформенность, то ищите кроссплатформенные библиотеки, реализующие нужный интерфейс. Если таких нет (видимо плохо искал), то пишите свою. Это довольно сложно.
    Ответ написан
    Комментировать
  • Как сделать что бы через некоторое время ноутбук работал от сети?

    @res2001
    Developer, ex-admin
    Не важно, что написано на экране - это все го лишь надпись, она может отражать действительность, а может и не отражать.
    Есть ноуты, которые могут работать напрямую от зарядки, а есть те которые работают исключительно от батареи и если у такого вытащить батарею, то он вообще не заведется. Сейчас у многих ноутов батарея несъемная (т.е. чтоб ее снять, надо разобрать ноут) и скорее всего такие модели работают всегда через батарею.
    Мое имхо - это реализовано в железе и программно это поведение никак не поменять.
    Ответ написан
  • Верно ли настроены данные конфигурации для клиента и сервера в OpenVPN?

    @res2001
    Developer, ex-admin
    Что за адрес у вас указан в опции server? Тут обычно указывают какую-то серую подсеть для того, что бы ее адреса использовались внутри ВПН. Адреса из под сети 169.254.х.х обычно используются при проблемах с назначением адреса (ошибка получения по DHCP и т.п.). Думаю не стоит использовать эту подсеть в принципе.

    Зачем вам ВПН внутри локальной сети (192.168.1.158)?

    Клиент пытается подключиться к серверу 192.168.1.158:1194.
    Скорее всего, ошибка связана с тем, что сервер не доступен по указанному адресу.
    Ответ написан
    1 комментарий
  • Как обращаться к устройствам, находящимся за NAT?

    @res2001
    Developer, ex-admin
    Т.к. Н1 и Н2 находятся в одной сети, то они имеют доступ друг к другу напрямую.
    Вопрос в том поднят ли NAT на H1?
    Если нет, то на H2 достаточно прописать маршрут до сети 192.168.2.0/24 через Н1, а на Н1 разрешить пересылку пакетов (скорее всего это уже у вас работает).
    Если на Н1 NAT поднят, то надо пробросить нужные порты на NAT в H1 на телефон.
    Ну и в обоих случаях не забыть проковырять нужные дырки в фаерволах.

    При это NAT на роутере значения не имеет, т.к. все происходит внутри LAN роутера.
    Ответ написан
    Комментировать
  • Как снизить загрузку памяти 56% на Windows 11?

    @res2001
    Developer, ex-admin
    В винде есть кэш программ, т.е. винда подгружает сама программы в память по одной ей ведомому алгоритму. Это делается для того, чтобы уменьшить время запуска программ. На этот кэш может уходить значительная часть занятой памяти. Этот кэш достаточно гибкий. Если у вас будет нехватка памяти, то винда может уменьшить размер кэша и т.п.
    Можете погуглить по prefetch и/или superfetch.
    При желании этот механизм можно выключить. Обычно в этом нет смысла.
    Так что высокая загрузка памяти даже при только что установленной винде - это нормально.
    Ответ написан
  • Вылетают приложения даже после переустановки винды 10. Что делать?

    @res2001
    Developer, ex-admin
    Тест памяти, тест дисков, полная проверка на вирусы с загрузочного носителя.
    Переустановка винды с полным форматированием всех дисков.
    Установка хорошего антивируса.

    Если аппаратных проблем нет (диск, память), то, видимо, ваша подруга, ходит по одним и тем же сайтам в интернете и ловит один и тот же вирус. Если текущий антивирь его не находит, видимо, надо сменить антивирус. У касперского есть вариант для создания загрузочной флешки с анитвирусом.
    И пока вы не отучите ходить ее по злачным местам или не подберете антивирус, который будет ловить эту заразу - это будет продолжаться бесконечно.
    Ответ написан
    Комментировать
  • Задача по математики из 5-го класса которая завела меня в ступор?

    @res2001
    Developer, ex-admin
    4 - откуда взялось то? гараж то у нас 1. Так что 3 гаража стоят 258300. 1 гараж стоит 86100, как на первом скрине.
    Во втором скрине ошибки с самого начала.
    1 машина = 2 гаража + 97300.
    2 гаража + 97300 + 1 гараж = 355600
    3 гаража = 355600 - 97300 = 258300
    1 гараж = 258300/3 = 86100
    Ответ написан
    Комментировать
  • Какие части ПО могут быть общие у 2 операц. систем Wind-ы на 2 дисках разных? Лагает рабочий стол?

    @res2001
    Developer, ex-admin
    Возможно глюки какого-то из драйверов, может быть видео драйвера.
    Видимо, драйвер один и тот же используется в обеих виндах. Поэтому и ведет себя одинаково. Сам драйвер установлен в разные метса, но он один и тот же.
    Попробуйте обновить драйвер с сайта производителя. Или если уже стоит последняя версия - понизить версию.

    На счет загрузки ЦП - 10-20%% может быть не показатель. Если ядер много, а 10-20%% это средняя цифра по всем ядрам, то одно из ядер может быть загружена на 100%, а остальные по 1%. В менеджере задач включите отображение графика загрузки ЦП для всех ядрер.
    Ответ написан
    Комментировать
  • Как настроить доступ в локальную сеть через Openvpn?

    @res2001
    Developer, ex-admin
    Компы во внутренней сети, что-то знают о сети ВПН? Там же другие адреса - это другая сеть. Маршрутизация как настроена? Не достаточно того, что бы клиент ВПН знал маршрут до другой сети через ВПН, надо еще и что бы эта "другая" сеть знала маршрут до клиентов ВПН.
    push "route 192.168.100.0 255.255.255.0" - только добавляет маршурт на клиента, но ничего не делает с компами внутри сети.
    Просто пропишите маршруты до ВПН сети через ВПН сервер на компах внутри сети, которым нужен обмен с клиентами ВПН.
    Так же не забудьте про фаерволы.
    Ответ написан
    7 комментариев
  • Как на pfsense настроить сразу 5 провайдеров?

    @res2001
    Developer, ex-admin
    Похоже pfSense начала что-то уметь в этом вопросе. Смотрите тут: https://docs.netgate.com/pfsense/en/latest/multiwa...
    Ответ написан
    Комментировать
  • Как отправить UDP пакет через командную строку Linux?

    @res2001
    Developer, ex-admin
    или объясните почему ни чего ен получится?

    Потому что передача по сети - это протокол обмена. И это не UDP или TCP, это протокол более высокого уровня. Протокол обмена должны поддерживать обе стороны, иначе это будет разговор слепого с глухим. Протокол включает в себя формат пакета/потока (список данных, описание данных и двоичного представления этих данных). Без знания протокола вряд ли получится что-то передать так, что бы принимающая сторона это восприняла как свой родной пакет и предприняла бы соответствующие действия.
    Протоколы могут быть двоичные и текстовые. В текстовом протоколе (HTTP, SMTP, ...) визуально видны части пакета и в принципе по анализу перехваченных данных можно сделать какие-то выводы.
    В двоичном протоколе без описания формата вряд ли что-то можно разобрать. Разве что что-то очень простое. У вас двоичный протокол.
    Поэтому, обычно, что бы что-то отправить по какому-то протоколу требуется специализированная утилита, реализующая этот протокол. Например для HTTP утилита - это браузер или какой-нибудь curl.
    Бывает, что протокол открытый, т.е. описание доступно в свободном доступе (или его можно купить). Так же часто используются закрытые протоколы, описание которых есть только у его разработчиков. Если у вас открытый протокол то шансы что-то скостылить есть.

    Поищите у производителя устройства (спросите на форуме поддержки) фирменную утилиту работающую из командной строки или описание протокола (или конкретно данного пакета для установки времени).

    Раз у вас пакет установки времени, то в данных должно присутствовать время. Это может быть какой-то вариант timestamp, например Unix timestamp. Можете попробовать поискать в дампе таймстамп на момент отправки пакета. Имея несколько вариантов пакета можно попытаться сделать какой-то его анализ и попробовать разобрать пакет на составляющие его поля. Сделать реверс инжиниринг.

    Еще немного. Обычно для установки времени не достаточно просто отправить 1 пакет с новым временем. Т.е. можно и так, конечно. Но в этом случае потенциально может быть большая не точность, т.к. доставка пакета не моментальна, могут быть задержки при передаче и приеме и все это практически не предсказуемо. И когда приемная сторона установит у себя полученное время, то это время уже может стать не точным. Поэтому для минимизации побочных эффектов задержек используют отдельные протоколы для установки времени и там уже как правило не один пакет.
    Для примера можете немного посмотреть в сторону протокола NTP - он используется для синхронизации времени через интернет, это открытый протокол, доступно его описание. Например ваша винда наверняка синхронизируется с каким-то NTP сервером от микрософт, фиг знает где находящимся.
    Ответ написан
    Комментировать
  • Что лучше использовать словарь или массив или связный список?

    @res2001
    Developer, ex-admin
    Надо знать достоинства и недостатки каждого контейнера и решить какие требования к контейнеру предъявляет конкретная задача (какие операции контейнера будут критичными для конкретной задачи).

    1. Массив (не отсортированный)
    Плюсы: доступ к элементу по индексу - O(1)
    Минусы: произвольный поиск - O(n); вставка, удаление - O(n) требуется перевыделение памяти и копирование всего контейнера
    2. Список
    Плюсы: вставка - если известно место вставки O(1); удаление - если известен удаляемый элемент O(1)
    Минусы: доступ по индексу, произвольный поиск - O(n);
    3. Словарь
    Может быть внутри реализован как дерево или как хеш-таблица. Как реализованы в питоне стандартный объект не знаю.
    3.1. Дерево. Обычно используется какой-то вариант сбалансированных двоичных деревьев поиска (красно-черное и т.п.)
    Плюсы: произвольный поиск, вставка, удаление - O(log(n))
    Минусы: для обеспечения сбалансированности дерева используются дополнительные "внутренние" операции с деревом, что увеличивает время каждой отдельно взятой операции вставки и удаления. Эти операции обычно достаточно "легкие" и константные по времени.
    3.2. Хеш-таблица
    Плюсы: произвольный поиск, вставка, удаление - O(1);
    Минусы: вставка и удаление могут в некоторых случаях приводить к перевыделению памяти и полному копированию и/или к пересчету хешей в зависимости от реализации.

    Как видите, нет универсального 100% подходящего контейнера на все случаи жизни. У всех есть свои плюсы и минусы.
    Ответ написан
    Комментировать
  • Как переименовать все файлы в нижний регистр с помощью cmd?

    @res2001
    Developer, ex-admin
    осложняется древним багом Windows

    Это не баг. Это фича. В WinAPI имена файлов регистронезависимые. Поэтому и нельзя переименовать, т.к. с точки зрения WinAPI это одно и то же имя.

    Вместо переименования с добавлением левого рандомного символа, предлагаю переносить в %TEMP% с одновременным изменением имени файла. Затем переносить обратно. Возможно переносить надо не в TEMP, а в другой каталог. Нужно что бы каталоги были на одном диске, чтоб не было реального копирования файлов. Может быть создавать тут же пустой временный каталог, так вы сможете гарантировать, что во временном каталоге не будет файлов с таким же именем.
    Ответ написан
    Комментировать
  • Почему происходит односторонняя потеря пакетов между двумя пк?

    @res2001
    Developer, ex-admin
    Вы с другом находитесь в одном городе?
    Если да, то, по идее, вы находитесь в одной провайдерской сети. Задержки должны быть минимальными при доступе друг к другу.

    Сделайте traceroute (tracert/mtr) с обоих компов друг к другу, сравните вывод, посмотрите через какие адреса проходит трафик в обоих случаях. Где происходят самые большие задержки. В нормальном состоянии трафик должен идти через одни и те же промежуточные хосты и даже может не выходить за пределы провайдерской сети. Если набор промежуточных хостов сильно различается, то возможно провайдер криво маршрутизирует трафик и он в одном из случае идет по какому-то не оптимальному маршруту. Если на одном из узлов с одной стороны задержки приемлемые, а с другой высокие - явно что-то не то с этим узлом.
    Можно звонить в поддержку и попытаться объяснить ситуацию, давя на проведенное вами исследование. Как минимум пожаловаться на неадекватные задержки внутри провайдерской сети.

    Для большей достоверности traceroute стоит запустить несколько раз, получить несколько показаний тестов и усреднить их.
    Ответ написан
    1 комментарий
  • Как узнать на каком жестком диске стоит Линукс?

    @res2001
    Developer, ex-admin
    Линукс может быть установлен на обоих дисках. Ничто не мешает монтировать разные разделы на разных дисках в разные пути, используемые системой, в т.ч. на этапе установки ОС. Тут вам не винда.
    df покажет какие разделы на каких дисках куда примонтированы.
    Так же надо посмотреть в БИОС с какого диска загружается ОС - там установлен загрузчик (скорее всего grub).

    Можете клонировать содержимое старого диска на новый и после этого заменить диски. Затем создадите на новом диске новый раздел на свободном пространстве и куда-нибудь примонтируете его. Клонировать можно из того же линукса, прицепив новый диск третьим и используя dd для побайтного клонирования.
    Ответ написан
    Комментировать
  • Как организовать одновременную работу на RDP через VPN и другой программы по удаленному доступу (Anydesk, TeamViewer, Chrome) (VNC не подходит)?

    @res2001
    Developer, ex-admin
    Вы описали сразу 2 проблемы:
    1. Десктопная винда (это та что не серверная) она однопользовательская в принципе. Т.е. работа одновременно двух пользователей - это нарушение лицензии. А подключение RDP всегда пытается создать новую пользовательскую сессию для своего подключения. Поэтому винда автоматически выкидывает пользователя, который уже залогинен.
    Можно использовать Windows Server там этой проблемы нет. Можно на десктопную винду поставить RDPWrapper, тогда поведение RDP сессии будет аналогично серверной винде, но это нарушение лицензии.
    К тому же это не избавит вас от того, что новое RDP соединение будет пытаться создать новую сессию.

    2. Есть режим RDP, когда вы подключаетесь к существующей сессии (консольной или RDP). Называется теневое подключение (Remote Desktop Shadowing). Но это требует дополнительной подготовки. Почитать можно, например, тут: https://domoticzfaq.ru/rds-shadow-tenevoye-podklyu...
    Если вы используете только теневое подключение, то с RDPWrapper можно не заморачиваться.
    Ответ написан
    3 комментария
  • Какой алгоритм быстрее и почему?

    @res2001
    Developer, ex-admin
    Ваш алгоритм быстрее. Но не лаконичнее. Это нормальное явление. Регулярно скорость достигается усложнением алгоритма. Но если раскрыть тему sort, то второй алгоритм уже не покажется таким уж простым.
    Еще ваш алгоритм не портит входные данные - часто это бывает важно.
    Ответ написан
    1 комментарий
  • Как войти на терминальный сервер без ввода логина и пароля?

    @res2001
    Developer, ex-admin
    В винде есть встроенный механизм хранения учетных данных для сетевых ресурсов: Credential Manager
    Проще всего до него добраться выполнив команду: control userpasswords2
    В открывшемся диалоге на закладке Advanced есть кнопка Manage Passwords. Вот это оно и есть.
    В общем создаете запись для удаленного сервера и пароль от нее будет использован автоматически.
    Управлять учетными данными в Credential Manager можно из командной строки с помощью утилиты cmdkey, т.е. можно автоматизировать процесс создания учеток на пользовательских компах.

    Так же в стандартном клиенте RDP после ввода пароля появляется галка "Сохранить учетные данные". Они сохраняются в тот самый Credential Manager. Затем достаточно вызвать RDP клиента и нажать Enter.
    Кроме того после полной настройки подключения в клиенте можно сохранить все настройки в *.rdp файл (кнопка "Сохранить как"), разместить его на раб.столе, например, и запускать подключение просто кликнув по иконке.
    Ответ написан
    Комментировать
  • Как правильно написать скрипт регистрации comcntr.dll при авторизации в системе?

    @res2001
    Developer, ex-admin
    Не в курсе про 1С и comcntr, но regsvr32 - регистрирует СОМ объекты.
    Чтоб dll зарегистрировалась ключ /n не нужен.
    И dll никуда не загружается. Регистрация - это внесение некоторых данных о СОМ объекте, содержащемся в dll в реестр винды. Чтобы в дальнейшем винда смогла вызывать этот объект.
    Кроме регистрации regsvr32 выполняет еще DllInstall - тут могут быть выполнены еще какие-то произвольные действия, необходимые объекту.
    Вообще я бы сначала скопировал dll на локальный диск, и только потом регистрировал уже с локального диска.
    По ключам: запустите: regsvr32 /?
    Ответ написан