Задать вопрос
  • Какой софт есть для RDP подключений windows->windwos аналог remmina?

    @res2001
    Developer, ex-admin
    RDP подключения можно сохранять как *.rdp файл. Заводите каталог с набором RDP файлов. Все.
    Ответ написан
    Комментировать
  • Как изменить имя выходного файла через CMakeLists.txt?

    @res2001
    Developer, ex-admin
    На счет имени таргета посмотрите тут: https://stackoverflow.com/questions/31038963/how-d...
    С каталогом, ну я бы в проекте сделал подкаталог MyDir и в нем свой cmakelists.txt с описанием таргета для библиотеки. Библиотека будет собираться в своем подкаталоге. В корневой cmakelists.txt включать подкаталог с помощью add_subdirectory(MyDir)
    Ответ написан
    1 комментарий
  • Почему не полностью отзывается клиент?

    @res2001
    Developer, ex-admin
    Что клиент подключается к серверам с разными ключами? Ну тогда надо отзывать и второй клиентский ключ.

    Вообще в вашей конфигурации нет смысла создавать клиентам разные ключи. Вам ничто не мешает синхронизировать клиентские ключи на серверах, точно так же как и список отзыва.
    Кстати для списков отзыва есть протокол OCSP, позволяющий проверять списки отзывов по сети. В этом случае отпадает необходимости передавать файлы со списком отзыва по серверам. Но тут, конечно, надо заморочиться с поднятием и поддержкой OCSP сервера и нужно указывать URL OCSP при создании сертификатов.
    Ответ написан
  • Можно ли подключится к удаленному реестру Windows под определенным пользователем?

    @res2001
    Developer, ex-admin
    Если выключить UAC на удаленном компе, то можно, зная логин/пароль админа, естественно.
    При удаленном подключении нет возможности повысить привилегии процесса, как это происходит при локальном запуске приложения.
    Не выключая UAC того же самого можно добиться установив ключ реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy в 1. Если такого ключа нет, то его надо создать по указанному пути с типом DWORD. Он отключает UAC при сетевых подключениях и повышение привилегий не требуется.
    Для справки: https://learn.microsoft.com/ru-ru/troubleshoot/win...
    Ответ написан
    Комментировать
  • Как исправить Error C4700: использована неинициализированная локальная переменная "x"?

    @res2001
    Developer, ex-admin
    Переменная x при определении не инициализируется. Впервые в коде встречается в этой строке:
    y = pow(x, k * 1) + fabs(pow(sin(x), 2) + sqrt(1 + pow(sin(x), 3)));

    Т.е. вы что-то пытаетесь вычислить используя данные из переменной х. Какое значение имеет переменная x в этом выражении? Т.к. вы не задаете значение переменной в программе до использования переменной, то переменная содержит любое произвольное значение, мусор.
    С переменной t все аналогично.
    Ответ написан
    Комментировать
  • Что означает синтакс const char *format [, argument]... в документации?

    @res2001
    Developer, ex-admin
    Функция с переменным числом аргументов, но минимально должен присутствовать 1 - format, все остальные опционально.
    Ответ написан
    1 комментарий
  • Какие протоколы нужно разрешить и какие не следует?

    @res2001
    Developer, ex-admin
    443 и 80 используются веб серверами (HTTP(S)), и это TCP. Тут UDP не используется.
    53 - это DNS запросы, могут быть как UDP (по умолчанию) так и TCP.

    На самом деле никто не мешает использовать любой порт любому протоколу (т.е. любое приложение может открыть любой порт если он не занят и хватает прав). Но то что я привел - это стандартная практика. Другое дело, что протоколы верхнего уровня обычно жестко связаны либо с TCP либо с UDP, но бывают исключения (тот же DNS).
    Ответ написан
    Комментировать
  • Как придумать архитектуру сервера на c++?

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

    @res2001
    Developer, ex-admin
    При включении с помощью include так и делают, т.к. для включенного makefile текущим каталогом будет каталог откуда вызван первичный makefile, а отсюда файлы в подкаталоге доступны только с указанием пути. include же по сути просто вставляет текст одного файла в другой и все.
    Другой вариант - не использовать include, а запускать make рекурсивно для каждого подкаталога с переходом в этот подкаталог (вроде ключ -с в make).
    Ответ написан
    Комментировать
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @res2001
    Developer, ex-admin
    Есть такие микроконтроллеры, где нет аппаратного деления. Оно там реализовывается программно и работает оооочень долго. Вот прям заметно дольше. И если деление на константу идет в цикле, то в таком случае выгоднее один раз перед циклом вычислить 1/2, а затем умножать на результат деления. 1/2 тут для примера, конечно.
    С подобными процами лично сталкивался и был неприятно удивлен фактом такой просадки производительности на делении.
    В общем случае, даже на современных настольных процах от интел или амд операция деления выполняется дольше умножения. Счет идет на несколько процессорных тактов. Иногда это может играть роль.

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

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

    @res2001
    Developer, ex-admin
    Видимо препод хочет, чтоб программа могла работать с несколькими значениями А и N.
    1. Ввод A и N и расчет периметра выносите в отдельную функцию.
    2. В main делаете вечный цикл, где спрашиваете пользователя что-нибудь типа "Давай еще посчитаем (1 - да; 0 - нет)". Если пользователь вводит 1, то выполняете функцию из п.1, после ее выполнения снова спрашиваете пользователя. Если пользователь вводит 0 - break из цикла и завершение программы.
    Ответ написан
    Комментировать
  • Как считывать данные в файл?

    @res2001
    Developer, ex-admin
    cin и cout - это объекты классов потоков ввода и вывода в консоль. Объекты cin и cout объявляются автоматически, т.е. вам не нужно создавать эти объекты, они уже созданы внутри стандартной библиотеки.
    Есть в std классы ifstream и ofstream, которые являются потоками ввода/вывода в файлы. Объекты этих классов не создаются автоматически, но вы можете создать эти объекты вручную и указать при создании с каким файлом объект должен работать. Дальше заменяете все cin/cout на объекты классов ifstream/ofstream.

    Есть другой вариант. Вообще не менять программу, но при запуске перенаправлять потоки stdin/stdout в файлы, что-то типа такого:
    prog.exe <file_input.txt >file_output.txt
    В этом случае в программе объекты cin/cout автомтатически начинают использовать file_input.txt для ввода и file_output.txt для вывода.
    Ответ написан
    Комментировать
  • Можно ли управлять всеми настройками windows через cmd?

    @res2001
    Developer, ex-admin
    Сейчас более актуально управление из powershell. По крайней мере сама микрософт сейчас активно posh продвигает.
    В cmd из коробки можно управлять много чем. Многие настройки винды лежат в реестре, а реестр править из cmd можно, правда применять большую часть настроек, внесенных правкой реестра на прямую, придется перезагрузкой компа.
    Выключить и перезагрузить комп можно командой shutdown.
    Ответ написан
    Комментировать
  • Проблема компилятора?

    @res2001
    Developer, ex-admin
    Поставь MSVC, там компилятор со всем необходимым входит в комплект.
    VSCode - это просто текстовый редактор, весь остальной функционал требует плагинов и другого программного обеспечения, не входящего в состав.
    Ответ написан
    Комментировать
  • Видит ли провайдер сети сервера vpn ip клиента?

    @res2001
    Developer, ex-admin
    Провайдер видит внешний адрес и порт ВПН клиента и внешний адрес и порт ВПН сервера. Эту информацию провайдер видит всегда, иначе пакеты не смогут передаваться по интернету.
    Ответ написан
    Комментировать
  • Почему не работает функция в с++ пытаюсь вызвать, а она не вызывается?

    @res2001
    Developer, ex-admin
    Вот это void BubbleSort(vector<int> v); не вызов функции. Это ее объявление. В коде предварительные объявления функций могут встречаться где угодно, синтаксически это верно, потому компилятор и не ругается. Но вызова не происходит, потому что его нет.
    Ну и учтите замечание 12rbah
    Ответ написан
    Комментировать
  • Как узнать размер массива, который был передан в шаблонную функцию?

    @res2001
    Developer, ex-admin
    Потому что при передаче в функцию статического/автоматического массива передается указатель, а не сам массив.
    8 - размер указателя на 64-битной платформе.
    Размер нужно передавать отдельным параметром, как писал mayton2019
    Ответ написан
    Комментировать
  • Чем отличаются size_type, size_t, unsigned X?

    @res2001
    Developer, ex-admin
    size_type - это обычно typedef из других типов, который разработчик контейнера решил использовать в контейнере. Скорее всего это будет тот же size_t. Для данного конкретного контейнера логично использовать его size_type.
    Размер size_t привязан к размеру указателя, т.е. sizeof(void*) == sizeof(size_t).
    Как раз это и обеспечивает, то что size_t может индексировать всю возможную память (по байту) для конкретной архитектуры процессора. Размер size_t на х32 - 4 байта, на х64 - 8 байт. Размер указателя, в свою очередь, равен размеру адресной шины процессора.
    В общем случае для счетчиков элементов и т.п. вещей всегда используйте size_t. Но если вы точно знаете, что у вас вот в этом конкретном контейнере/массиве не может быть больше n-ого количества элементов (например массив фиксированного размера), то можно использовать тип меньшей разрядности, достаточный для индексации контейнера.
    Переменные счетчиков, индексов и т.п. обычно делаются беззнаковыми (size_t - беззнаковый), потому что обычно алгоритмически эти переменные никогда не принимают отрицательных значений. Так зачем терять лишний значащий разряд? Но это не всегда так, в каждом конкретном случае нужно делать свой выбор, универсальных решений нет.
    Бывает ли на практике размер контейнера таких размеров которые вмещаются в size_t? В базах данных запросто может быть таблица размером больше, чем помещается в 4 байтовый size_t. Максимальное значение 8 байтового size_t - это ооочень большое число. В практических задачах вряд ли найдется контейнер, вмещающий такое количество объектов (но всегда могут быть исключения). Но итерироваться или считать можно не только объекты в контейнере, можно считать например байты/сектора на диске или пакеты в интернете или контейнер может лежать в распределенной системе хранения размером в экзабайты или больше (сейчас это уже реально).
    Ответ написан
    2 комментария
  • Как посчитать количество символов в char на С?

    @res2001
    Developer, ex-admin
    Конкретно для приведенного примера можно делать так: (sizeof(text) - 1)
    Это будет работать только в подобных случаях, когда text - это статический/автоматический массив фиксированного размера (как в данном примере). -1 требуется, чтоб удалить завершающий нулевой символ.
    Преимущество перед strlen в том, что sizeof вычисляется на этапе компиляции, т.е. по факту в коде вместо этого выражения будет константа 14, вычисленная компилятором.
    Кстати, можно делать еще так: sizeof("Literal string") - 1

    Если text будет определена по другому, например char *text = "Literal string";, то такой подход уже не прокатит.
    Универсальный вариант, который будет работать для всех случаев однобайтной строки с завершающим нулем - использовать strlen.
    Ответ написан
    Комментировать