• Как найти устройство зная его MAC?

    @res2001
    Developer, ex-admin
    Пинговать все устройства по IP по порядку в вашей ЛВС, после каждого пинга проверять таблицу ARP на предмет наличия нужного МАСа.
    Можно сделать простым батником. Задачу можно легко распараллелить.
    Сработает, если устройство включено и отвечает на пинги. Зная IP адрес дальше уже будет проще.

    Если у вас DHCP развернут, то можно посмотреть у него в логах наличие такого МАСа. Возможно этого будет достаточно. Возможно потребуется включить логирование :)
    Ответ написан
    Комментировать
  • Почему pause в cmd скрипте не предотвращает закрытие окна?

    @res2001
    Developer, ex-admin
    goto :eof - приводит к завершению скрипта в этом месте. Это равносильно exit.

    Пример кода приведен ниже в коментариях: Почему pause в cmd скрипте не предотвращает закрытие окна?
    Ответ написан
    9 комментариев
  • Зачем в cmd bat (командной строке) создали режим enabledelayedexpansion?

    @res2001
    Developer, ex-admin
    Как я себе это понимаю:
    cmd подставляют значения переменных до выполнения команды и формируют очередную командную строку, затем ее выполняют.
    При этом команда for ... () со всем ее содержимым интерпретируется первоначально как одна команда (это можно увидеть если убрать echo off), соответственно переменные во внутренних командах цикла не могут быть подставлены в этот момент, т.к. они просто не имеют нужного значения в начале цикла.
    Затем, когда выполняется цикл, запускается вложенный cmd и уже ему нужно подставлять переменные в команды.
    Для того чтобы переменные не подставлялись перед выполнением цикла используется другой синтаксис обращения к переменным.

    То же самое происходит и с if, видимо.
    Ответ написан
    Комментировать
  • Какой компилятор выбрать для C++?

    @res2001
    Developer, ex-admin
    Если под виндой сидишь, то используй MSVS.
    Если планируешь что-то кросс-платформенное делать, то gcc/clang в самый раз.
    Проще всего под винду использовать mingw - это сборка gcc для винды с частично портированным POSIXом.
    Сам mingw можно установить разными способами.
    Мне нравится связка msys2 + mingw. msys2 - это линуксовая оболочка со всем стандартным линуксовым окружением и пакетным менеджером pacman. С помощью пакетного менеджера можно устанавливать и mingw и clang и кучу библиотек и все это обновлять одной командой. Легко подключать к разным IDE (но не к MSVS) или запускать из командной строки винды.

    Так же под виндой можно настроить WSL в него поставить какую-нибудь ubuntu, а внутрь уже любой доступный компилятор и т.д. и т.п. По сути это виртуальная машина с линуксом.
    Ответ написан
    Комментировать
  • Безопасен ли класс для многопоточности?

    @res2001
    Developer, ex-admin
    Не безопасен.
    Вы защитили мьютексом только запись в очередь (push), но не чтение из нее (pop). Так что очередь сломается рано или поздно.
    Вообще тут лучше бы подошла какая-то специализированная структура со встроенной поддержкой многопоточности, а не стандартные контейнеры.
    Можно использовать кольцевой буфер или очередь майкла-скотта. В booste, на сколько помню, есть и то и другое.
    Но для начала сгодится и такой вариант.

    Кроме того для вывода на экран в Линукс можно учитывать тот факт, что ОС обеспечивает атомарную запись в консоль для буфера менее PIPE_BUF байт. https://linux.die.net/man/7/pipe
    Думаю в винде то же есть похожая гарантия, но это не точно.

    Кроме того, операция << для логгирования не очень подходит, т.к. вынуждает использовать конструкции типа:
    oss << "Error: " << strerror(err) << "(" << err << ")";

    для вывода 1 строки. А это уже не одна запись в очередь, а несколько. Так что защита мьютексом тут не будет гарантией вывода целостной строки.
    Для логгера больше подойдет вариант типа std::printf, когда в один вызов передается вся информация для генерации целой строки.
    Ответ написан
    4 комментария
  • Как быть при утечке памяти? Можно ли "очистить" ОЗУ скриптом?

    @res2001
    Developer, ex-admin
    Попытка убить программы и возможные процессы освобождает всего 2-5 ГБ

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

    Если все таки дело в утечках памяти, то объем памяти выделенной процессом можно увидеть в Task Manager.
    Можно просто отсортировать список процессов по памяти и понаблюдать некоторое время. Так определите какой процесс жрет память.

    Не обязательно завершать программу через taskkill, у нее же наверняка есть стандартный вариант закрытия приложения, наверное так не будут теряться данные. Чтоб например в батнике эмулировать нажатия кнопок и т.п. для закрытия программы можно использовать утилиты типа nircmd или autoit.

    Вообще использовать не поддерживаемые разработчиком программы - стремное занятие. Стоит подумать о переходе на альтернативное ПО.
    Ответ написан
    Комментировать
  • Как перевести число из байтов в число?

    @res2001
    Developer, ex-admin
    Ответ в комментариях
    Ответ написан
    Комментировать
  • Можно ли запускать на серверах c ARM процессорами, виртуальные машины на х86, amd64?

    @res2001
    Developer, ex-admin
    Это уже не виртуализация, а эмуляция. Как писали выше qemu это умеет, но из-за эмуляции большая потеря производительности. Это можно использовать где-то в тестовой среде или в разработке, но явно не в продакшене.
    Ответ написан
    Комментировать
  • Как через openvpn linux клиента иметь доступ во всю подсеть?

    @res2001
    Developer, ex-admin
    1. В конфиге OpenVPN ВПН сервера добавить соответствующую опцию push route
    2. На всех компах в сети (кроме ВПН сервера), к которым должен быть доступ из ВПН, добавить маршрут до ВПН подсети через ВПН сервер.
    Ответ написан
  • Как компилировать общие файлы двух бинарников один раз?

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

    @res2001
    Developer, ex-admin
    TLS Error: TLS key negotiation failed to occur within 60 seconds

    Произошел разрыв соединения из-за таймаута ожидания ответа от сервера.
    Скорее всего сервер по указанному протоколу/адресу/порту не доступен или трафик блокируется фаерволом.
    Если в это же время посмотреть логи сервера, то там, скорее всего не будет никаких признаков входящего клиентского соединения.

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

    Судя по всему у вас используется протокол TCP, для проверки доступности сервера можете использовать telnet. Если телнет подключиться - значит сервер доступен по адресу/порту.
    Ответ написан
  • Ошибка в коде C++.?

    @res2001
    Developer, ex-admin
    Кроме указанной компилятором ошибки у вас будет утечка памяти, если 2 раза вызовите set для одного и того же объекта.
    Ответ написан
    Комментировать
  • Правильно ли в C++ использовать директиву препроцессора define?

    @res2001
    Developer, ex-admin
    Помимо define в плюсах есть и другие инструменты.
    Для констант лучше использовать constexpr, для генерации кода шаблоны.
    Для define то же есть своя ниша для использования - тот вариант, что вы привели в примере и т.п.
    В Си кроме define нет ничего другого. В плюсах есть выбор.
    Ответ написан
    Комментировать
  • Как создать структуру с вектором, который хранит экземпляры классов?

    @res2001
    Developer, ex-admin
    В векторе Orderа надо хранить ссылки на Item (или указатели).
    Т.к. дочерние классы Item имеют размер >= sizeof(Item), а в векторе каждый элемент имеет фиксированный размер (сейчас sizeof(Item)), то по сути дочерние классы при попадании в Order обрезаются до состояния Item, а это не то что нужно.
    Ответ написан
    1 комментарий
  • Почему GCC не видит встроенную атомарную операцию?

    @res2001
    Developer, ex-admin
    Почему не использовать функции из стандартной библиотеки?
    https://en.cppreference.com/w/c/atomic/atomic_comp...
    Ответ написан
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Developer, ex-admin
    Раз уж вы используете для преобразования в число strtol, то для обратного преобразования вполне можно использовать snprintf(asciiHex, sizeof(asciiHex), "%X", decVal).
    Хотя эти операции достаточно простые, можно было бы легко реализовать самому оба варианта.

    strtol ждет в первом параметре строку с завершающим нулем. У вас завершающий ноль в asciiHex отсутствует.
    Kolchislo как объявлена? Это строка с завершающим нулем? Возможно стоит использовать strcpy, а не memcpy.
    Зачем вам промежуточный массив asciiHex? Почему в strtol не использовать сразу kolchislo?
    Ответ написан
  • Как исправить ошибку буфера с UART?

    @res2001
    Developer, ex-admin
    Зачем так сложно читаете в read_block?
    Возможно из-за того что у вас возвращаемое ReadFile значение никак не обрабатывается и случаются эти пропуски.
    Если у вас в буфере приема порта что-то лежит - это не значит, что ReadFile гарантированно завершиться синхронно.

    Я бы сделал синхронный ReadFile в цикле с проверкой количества прочитанных байт.
    Учитывая, что и запись и чтение в вашей реализации по сути синхронные, то нет смысла усложнять асинхронщиной.
    Ответ написан
  • Как вернуть двумерный массив?

    @res2001
    Developer, ex-admin
    так:
    // удален не верный пример
    или так:
    int* discribeTwoDimensional() { 
      ... 
      return (int*)masInt; 
    }

    Во втором случае на вызывающей стороне будет указатель на одномерный массив. Так что вычислять правильный индекс нужно будет вручную, используя адресную арифметику.

    Возвращать статические переменные определенные внутри функции не правильный подход. Обычно такие статические переменные используются только в этой функции.
    Лучше принимайте массив в параметре и инициализируйте его. Тогда и возвращать ничего не придется и подход будет правильным.
    Ответ написан
  • Какую книгу про параллельное программирование стоит почитать программисту-теоретику?

    @res2001
    Developer, ex-admin
    Параллельные вычисления могут быть разными.
    Можно например MPI использовать или OpenMP, или SIMD инструкции процессора (intrinsic) или вычисления на GPU.
    То же вполне себе параллельные вычисления. По этим темам отдельные книги, по SIMD intrinsicам мануалы от Intel, про GPU - соответствено от Nvidia или AMD.

    По многопоточности в С++ есть:
    1. Энтони Уильямс "С++. Практика многопоточного программирования"
    2. Райнер Грим "Параллельное программирование на современном С++"
    Ответ написан
    Комментировать