• Как развернуть второй сервер OpenVPN на одном железе?

    @res2001
    dmvlch_dev, Просто создать еще один адаптер. Настраивать адаптер не требуется.
    Если не указывать номер адаптера в конфиге (dev tun0), а просто указывать dev tun, то openvpn сам выберет первый свободный адаптер нужного типа (в этом случае и менять конфиг не требуется).
    Написано
  • Как используются "магические константы" в реальных реализациях?

    @res2001
    Магические константы не появляются ниоткуда. Никакие они не магические, всегда есть объяснение использованию конкретно этой константы, нужно только его найти, часто это бывает не просто.
    В любом случае, использование константы продиктовано предметной областью и конкретной задачей.

    Вас не смущает использование магической константы NULL?

    Магическими их называют, потому что, когда вы в коде используете константу типа 1234 - то нифига не понятно, что эти цифры означают в коде и зачем они тут. Поэтому они магические - не понятные. Если этой константе дать имя, то магия может исчезнуть, если имя будет удачным.
    Написано
  • Как попасть в IT школьнику?

    @res2001
    Eugene-Usachev, Оттачивай навык, если есть желание. Пообщайся с людьми, это лучше чем "общаться" с компьютерами.
    Написано
  • Как исправить ошибку Error LNK2019 unresolved external symbol... при вызове функции из сторонней библиотеки?

    @res2001
    Андрей,
    я сторонню библиотеку указал в Additional include Directories

    Название пункта говорит само за себя - вы указали дополнительный путь где компилятор будет искать файлы заголовков, чтоб их можно было включить директивой #include.
    То, о чем я писал выше вы не сделали. Как написал Александр Ананьев, библиотеку надо добавить еще и в опции Linkerа.
    Но что бы это добавление работало, библиотека должна быть доступна компилятору, т.е. уже собрана как статическая или динамическая библиотека (см. коментарий Станислав Макаров ).
    В микрософтовском компиляторе используются lib файлы для компоновки с библиотеками. В случае со статической библиотекой lib файл содержит саму библиотеку в бинарном виде. Для динамической библиотеки dll библиотеки будет лежать отдельно, а в lib файле будут только ссылки на dll.
    При компоновке нужен lib файл библиотеки.
    При запуске вашей программы в случае использования динамической библиотеки dll должна быть доступна загрузчику ОС, lib файл на этом этапе не используется.
    Написано
  • Как исправить ошибку Error LNK2019 unresolved external symbol... при вызове функции из сторонней библиотеки?

    @res2001
    Чтоб использовать библиотеку не достаточно только подключить заголовочный файл директивой #include надо еще и указать компилятору использовать библиотеку в опции -l.
    В MSVS используемые библиотеки указываются где-то в опциях проекта, точнее не скажу.
    Написано
  • Как искать значение в сбалансированном бинарном дереве?

    @res2001
    lightseeker,
    По какой логике надо искать ?

    Ну у вас же была какая-то логика по которой вы запихнули вторую тройку именно к правому потомку (под четверку), по той же логике вы ищите и все последующие вхождения. Т.е. если у вас дубликаты всегда в правом потомке, то и ищите их там же - левый можно не обходить.
    Но я бы воспользовался советом GavriKos хранить количество дубликатов в листьях. Точнее хранить количество вхождений значения вместе со значением. Для вашего случая, когда данные - это просто числа, количества будет достаточно. В более сложных вариантах может потребоваться организовать, например, связный список в каждом узле.
    Написано
  • Как можно передать структуру в printf, а к переменным её обращаться из шаблона?

    @res2001
    Если "о структуре мы ничего не знаем", только указатель на void вместо структуры, то и вывести мы ничего не можем.
    Даже имея шаблон это не сделать корректно в общем случае.
    Тем более printf это не умеет.

    Но printf умеет так:
    S1 s1 = (S1){1, 1};
    printf("A:  %d,  B: %d",  s1);

    Т.е. тут не указатель void, а полностью определенная структура. Это работает, потому что компилятор кладет на стек в качестве параметров printf всё содержимое структуры. Поля в шаблоне нужно указывать в порядке следования полей структуры, пропускать и добавлять поля нельзя.
    Написано
  • Высокий пинг по необоснованным и не понятным причинам. В чем может быть дело?

    @res2001
    ilya12081991, Проверить просто:
    Выключите других потребителей вашего интернета и
    1. по перемещайтесь с ноутом по квартире и одновременно следите за пингом.
    2. подключитесь к роутеру проводом и посмотрите пинг
    Если в обоих случаях пинг не улучшается, то проблемы не с сетью, а с компом. Смотрите, что там у вас грузит процессор/сеть/диск.
    Написано
  • Как открыть все порты в промежутке?

    @res2001
    Переадресация не открывает порты, она разрешает переадресацию трафика с внешнего порта на внутренний адрес:порт.
    Открывает порт приложение, которое работает на компе с указанным адресом и приложение должно запрашивать конкретный порт для открытия.
    Если приложение не запущено, то порт не открыт и вы можете сколько угодно настраивать переадресацию - трафик на закрытом порту никто не примет.
    Написано
  • Завершается программа на Си из-за одной строчки кода. Что делать?

    @res2001
    noame, Кроме описанной в ответе ошибки, при изменении переменных _dogCoordinatesX и _dogCoordinatesY, нужно проверять их текущее значение на достижение предельных значений.
    Например, если переменная _dogCoordinatesX уже имеет значение 15, а вам надо сделать ее инкремент, то вы должны либо не делать инкремент, либо сбросить значение в 0 и т.п. для всех случаев.
    Написано
  • Какая временная сложность у простого алгоритма вычисления факториала (О большое)?

    @res2001
    Сергей delphinpro,
    стоит учесть внутреннюю реализацию функции range?

    Если в range используется yeld для возврата промежуточных значений, то в каждом вызове происходит только проверка условия окончания и возврат следующего значения. В этом случае сложность всего алгоритма остается O(n).
    Если в range есть цикл, тогда он возвращает массив последовательных элементов [1; n+1] и дальше цикл итерируется по значениям из массива. В этом случае range вызывается один раз. Тогда сложность будет O(n+n) = O(2n) = O(n)
    Написано
  • Пишет что повредил кучу? Чего?

    @res2001
    Скорее всего где-то выход за пределы выделенного массива, что может повреждать структуры менеджера памяти.
    С использованием MPI анализ в valgrind может быть не полноценным, т.к. процессы, запускаемые MPI valgrind не будет анализировать.
    Видимо придется искать ошибку в "ручном" режиме.
    Написано
  • Почему не создается канал в си?

    @res2001
    Nulltiton, Значит вы готовы работать с кодом. Вопрос был об этом.
    Часто тут пытаются через вопросы добиться того, что бы кто-то другой исправил все ошибки и довел код до ума.

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

    @res2001
    Данила Румянцев, Нет однозначного ответа на этот вопрос. Выбор между памятью и диском будет зависеть от конкретной задачи. Вы, как программист, должны понимать плюсы и минусы обоих подходов и выбирать для решения задачи тот что будет оптимальным для данной конкретной задачи. Можно и комбинировать подходы.
    Написано
  • Почему не создается канал в си?

    @res2001
    Nulltiton,
    Попытался убрать return у GetLastError, однако ничего также не изменилось

    Ничего и не должно изменится.
    GetLastError - просто возвращает код ошибки последней системной функции. Этот код надо сохранить в переменную и вывести на экран. Чтоб было совсем хорошо, можно получить от системы текстовое описание ошибки и вывести его, вместо числового кода. Пример вывода текстовой ошибки можно увидеть тут: https://learn.microsoft.com/en-us/windows/win32/de...
    Так вы узнаете, какая ошибка произошла при вызове системной функции и уже можно будет исправлять конкретную ошибку. А пока можем только гадать.

    // формируем командную строку 
      printf(lpszComLine, ...);

    Вы не правильно используете printf выше. https://en.cppreference.com/w/c/io/fprintf

    Вообще это ваш код? Если не ваш и вы не в состоянии его отлаживать, то обсуждать не чего.
    Написано
  • Как подключиться по RDP к виртуальной винде через vpn?

    @res2001
    Явно проблема не в ВПН.
    IP адрес виртуальной винды находится в той же IP подсети, что адрес хоста этой ВМ (или другой физической машины в этой сети)?
    Написано
  • Почему не создается канал в си?

    @res2001
    Nulltiton, 1. Стоит начать с того, что бы добиться читабельного вывода в консоль. А уж потом решать проблемы с процессами и каналами.
    По умолчанию кодировка консоли CP866, а ваша программа, похоже выводит в Unicode.
    Попробуйте переключить консоль в UTF8, может поможет. Команда: chcp 65001
    chcp без аргументов выведет текущую кодировку консоли.
    2. У вас GetLastError стоит в return из main, Это значит, что результат не будет выведен на экран, а вернется как код ошибки завершения процесса. Код ошибки можно проверить в батнике (в котором вы будете запускать вашу программу) с помощью конструкции if errorlevel. Описание можно нагуглить, например тут: https://ss64.com/nt/errorlevel.html
    Но проще выводить текстовое сообщение об ошибке в самой программе. Так же от системы можно получить текстовое описание ошибки, а не только код ошибки. Смотрите документацию по GetLastError.
    Написано
  • Как вывести два сервиса в сеть из одного/двух ip?

    @res2001
    BHA2PE, Еще вариант - наверное все известные веб сервера могут одновременно обслуживать несколько сайтов с разными доменными именами, тот же apache и ngnix.
    Но сейчас такой подход не популярен, т.к. большинство использует готовые преднастроенные службы в контейнере докера и т.п. А это по определениею уже разные виртуальные хосты и веб сервера.

    Вариант с контейнерами более безопасен, но требует больше ресурсов.
    Написано
  • Как вывести два сервиса в сеть из одного/двух ip?

    @res2001
    BHA2PE, Вы верно рассуждаете.
    Если все ваши сервисы - это веб сервисы со стандартными портами. То в этом случае пользователь должен сам указать правильный порт в URL.
    Например: https://mail.domain.ru:8080/; https://other_services.domain.ru:8090/; https://www.domain.ru

    Другой вариант - поставить промежуточный веб прокси, например nginx, и им разруливать разные доменные имена на разные локальные сервера. Тогда снаружи у вас будет использоваться один и тот же порт и надо настроить его перенаправление на nginx. Т.е. в такой схеме разруливанием потоков будет заниматься не роутер и NAT, а nginx.
    Написано