• Как через 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. Райнер Грим "Параллельное программирование на современном С++"
    Ответ написан
    Комментировать
  • Как сделать в Bat-нике при нажатии 1 действие, при втором нажатии 2 действие?

    @res2001
    Developer, ex-admin
    Тут придется усложнить алгоритм немного - надо же как-то отличать первый запуск от второго.
    Можно, например, проверять существование некоторого файла-флага, который будет лежать где-то в заранее заданном каталоге. Если файла-флага нет - считаем, что это первый запуск: выполняем первую команду и создаем файл-флаг. Если файл уже существует, то считаем, что это второй запуск: выполняем вторую команду и дополнительно можно удалять файл-флаг, тогда следующее нажатие будет считаться снова первым. И т.д. по кругу.
    В случае использования файла-флага содержимое файла не важно, достаточно проверять его существование.

    Если захотите добавить еще вариантов, то можно в файл записывать номер выбранного действия и проверять уже не просто существование файла, а читать цифру из файла и в соответствии с ней выполнять действия.

    Можно вместо файла использовать какой-то параметр в реестре.

    Все это можно сделать на батниках.
    Ответ написан
    Комментировать
  • Как устранить ошибку конверсии при использовании битовых полей?

    @res2001
    Developer, ex-admin
    У вас ошибка появляется из-за опции -Werror=conversion компилятора. Она заставляет компилятор генерировать ошибки при любом неявном преобразовании, в котором есть вероятность потери данных или изменении значения. А в этой операции такая вероятность есть по формальным признакам.
    Тут можно либо убрать опцию, либо, применить явное преобразование к unsigned int:20

    Согласен с jcmvbkbc по поводу отказа от битовых полей.
    Хотя опция -Werror=conversion добавит проблем и без битовых полей, но, с другой стороны, она заставляет глубже понимать, то что вы написали.
    Ответ написан
    Комментировать
  • Где windows хранит путь к перемещенным папкам профиля?

    @res2001
    Developer, ex-admin
    Вообще по пользователям в реестре: \HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
    Если нужен только текущий пользователь, то переменная окружения %USERPROFILE%

    Пользовательский профиль можно переместить весь, тогда изменения будут в USERPROFILE и в реестре.
    Но можно переносить и отдельные папки профиля в другое место. Тут уже не знаю точно как винда это хранит. Из возможных вариантов:
    1. где-то в пользовательском реестре лежит новый путь
    2. вместо стандартного каталога записывается ссылка на новое место
    Ответ написан
    Комментировать
  • Можно ли получать каталоги по FTP через CMD?

    @res2001
    Developer, ex-admin
    Команда ftp поддерживает скрипты, которые можно передать команде через опцию -s.
    Скрипт просто содержит список стандартных команд ftp, которые нужно выполнить.

    Можно, например, одним скриптом ftp получить список файлов в каталоге.
    Затем этот список уже батником разобрать, вытащив из него отдельные имена файлов и сформировать второй скрипт по загрузке этих файлов.
    Все это думаю можно упаковать в один батник.

    Начать стоит с запуска в консоли ftp и сделать то что вы хотите руками. Заодно освоите команды ftp и разберетесь, что писать в ftp-скрипты.
    Ответ написан
    Комментировать
  • Функция не работает, не понимаю почему, как можно исправить?

    @res2001
    Developer, ex-admin
    Если x и y - это min и max, то у вас ошибка:
    if (b[i] >= x || b[i] <= y)
    надо
    if (b[i] >= x && b[i] <= y)

    Копировать элементы можно с помощью std::memcpy, а не в цикле поэлементно.
    Ответ написан
    Комментировать
  • Как именно гарантируется выделения n байт памяти библиотекой stdint.h?

    @res2001
    Developer, ex-admin
    В Си, да и в С++, стандартные целочисленные типы, поддерживаемые компилятором - это char, short, int, long long и их беззнаковые братья. Стандарт действительно не фиксирует размеры стандартных целочисленных типов. Это сделано потому что стандарт описывает абстрактный язык, который должен компилироваться для разных платформ.

    Компилятор же компилирует программу под конкретную платформу с конкретными соглашениями по типам. Ему заведомо известны размеры стандартных типов на данной конкретной платформе. Стандартная библиотека так же обычно пишется под конкретный компилятор и конкретную платформу.
    Так что (u)intX_t - это всегда define над стандартными типами. И ничего странного в этом нет.
    Ответ написан
    Комментировать
  • Фреймворки для кросс-платформенной разработки. Практикуют ли переписывание под разные платформы?

    @res2001
    Developer, ex-admin
    Под плюсы довольно много кросс-платформенных библиотек для GUI, самая известная, видимо, Qt.
    Сам язык и его стандартная библиотека вполне кросс-платформенны. Но в разных компиляторах и в разных реализациях стандартной библиотеки могут быть свои нюансы.
    Ответ написан
    Комментировать
  • Как реализовать Оператор OR в команде FOR?

    @res2001
    Developer, ex-admin
    в forе проверяйте текущий файл только на вариант SEND_2 и сразу делайте переход, если из forа выйдет без перехода - значит это COPY_2.
    Ответ написан
  • Как вывести длинну переменной или массива?

    @res2001
    Developer, ex-admin
    Массив может быть представлен по разному.
    Для статического массива sizeof(arr) сразу возвращает размер массива в байтах.
    Для указателя на массив sizeof(ptr_arr) возвращает размер указателя. Чтоб получить размер массива в этом случае надо сделать sizeof(ptr_arr[0])*N.
    Когда вы передает в функцию статический массив, то внутри функции это все равно указатель (не смотря на то, что в аргументе он может быть объявлен как int arr[N]) и sizeof над ним ведет себя как с указателем, а не как с массивом.

    Вариант sizeof(arr[0])*N будет правильно работать как с указателем так и со статическим массивом.
    При этом реального обращения к памяти arr[0] не происходит, поэтому этот вариант можно использовать даже в таком случае:
    int *ptr_arr=NULL;
    size_t size_arr = sizeof(ptr_arr[0])*N;
    Ответ написан
    Комментировать