Задать вопрос
  • Как создать указатель на вводимый текст?

    @res2001
    Borton1, Тут вопрос в приоритетах и задачах тех кто платит деньги. Если бы всегда было можно ковыряться с задачей на ассемблере столько времени сколько нужно, то и Си возможно не появился бы. Я уж не говорю о питоне и т.п. :-)
    Кстати, на счет питона. На сколько я знаю тензорфлоу для питона написан на плюсах. Так что скорость он может выдавать вполне приемлемую и не факт, что у вас получится лучше и быстрее на чистых плюсах решить задачу.
    В питоне, кстати, много хороших и быстрых библиотек для расчетов.
    При желании можно написать собственный модуль на С/С++.
    У питона свои недостатки - кривая многопоточность, например. Но это можно частично обойти при необходимости.

    В общем С/С++ для чего-то быстрого и низкоуровневого. Потом это быстрое и низкоуровневое заворачивают в оболочку для использования в интерпретируемых языках и уже из них используют. Это нормальный подход во многих задачах. И это достаточно интересное направление - связка С/С++ и интерпретируемых языков.

    Но есть сферы, где С/С++ в приоритете - ядра ОС, загрузчики, МК, прочий ембедед.
  • Как правильно написать скрипт регистрации comcntr.dll при авторизации в системе?

    @res2001
    Виталий Гусев, Батником можно проверить есть какая-то ветка в реестре или какие-то значения. Нужно только выяснить что туда пишется при регистрации - просто поищите в реестре по имени библиотеки. СОМ объекты регистрируются в ветку HKLM/Software/Classes/CLSID.
    В пользовательском разделе реестра то же есть аналогичная ветка.
    Для работы с реестром из батника можно использовать команду reg: reg /?

    Можно сделать по другому: каждый раз сначала удалять регистрацию и потом повторно регистрировать. Тогда возможно ошибок не будет.
  • Как правильно написать скрипт регистрации comcntr.dll при авторизации в системе?

    @res2001
    Виталий Гусев, Зачем вызывать regsvr32 второй раз? Один раз зарегистрировал и хватит. Обычно это так работает.
    Так же можно, например, проверять зарегистрированы ли уже объекты из comcntr или нет. И если нет, то вызывать регистрацию. Так же можно придумать что-то и при смене версий - удалять старую регистрацию и регистрировать новую библиотеку.
  • Как создать указатель на вводимый текст?

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

    @res2001
    Borton1, Скажем так. Это другое программирование. В С/С++ вы ближе к железу и ОС и надо лучше понимать как оно там все работает, иначе толку не будет.
    В любом случае, нет настоящего или не настоящего программирования, для каждой задачи свой инструмент. Язык - всего лишь инструмент.
    Если бы вы занимались разработкой ИИ, то питон или какой-нибудь R для вас был бы самое то.

    я решил использовать realloc()

    Раз уж вам нравится Си, то сообщаю, что операции выделения/освобождения динамической памяти очень дорогие в плане производительности. Поэтому надо очень аккуратно с ними обращаться.
    Для вашей задачи лично я бы, конечно, не стал использовать getchar и посимвольный ввод. Я бы выделил 1 большой буфер (его можно выделить на стеке в автоматическом массиве, надо учитывать что размер стека ограничен) в него читал, затем обрабатывал буфер, если нужно - повторное чтение в тот же буфер. realloc как и хранение всего ввода для вашей задачи избыточно.
  • Как сохранить значения нескольких переменных в С++ 17?

    @res2001
    mayton2019, Можно было. Но тогда не было семантики перемещения и возвращаемые объекты копировались, а это дополнительные не нужные накладные расходы. Так же не знаю, что тогда было с RVO оптимизацией, думаю, что она тогда работала хуже, чем сейчас.
  • Как сохранить значения нескольких переменных в С++ 17?

    @res2001
    Никита Савченко, Нет лучшего ответа. Это нормально. И передача параметров по ссылке и возврат объекта - вполне рабочие варианты. В разработке часто надо будет выбирать из нескольких вариантов применительно к конкретной ситуации.
    В вашем конкретном варианте я бы взял или ссылки или вариант от Adamos
    Если бы параметров для ввода было 100, то больше бы подошел возврат объекта, а так же вариант от Adamos :-)
    Так что берите вариант от Adamos
    В целом совет mayton2019 про самый простой вариант очень дельный. Всегда надо его придерживаться, если против простого варианта нет веских аргументов.
  • Как создать указатель на вводимый текст?

    @res2001
    Borton1, Ну вот уже и с задачей определились :-)
    Да это обработка. Можно использовать getchar в вашем случае. И вам не понадобится никакой буфер для чтения в этом случае. Вам нужно объявить
    int count[255] = {0};
    Затем в цикле, используя getchar читаете очередной символ, этот символ будет индексом для массива. Инкрементируете соответствующий элемент массива count для подсчета символов. Переходите к чтению следующего символа. Единственный момент, видимо, надо предусмотреть возможность выхода из цикла, например, когда пользователь нажмет Enter.
    После завершения цикла распечатываете все элементы массива count, которые >0.
    Индекс массива - это код символа, значение элемента массива - количество символов.
  • По ошибке установила Windows server 2022, как все вернуть обратно?

    @res2001
    Вам повезло. Вы установили версию Windows Server Core, которая не включает в себя раб.стол.

    Остались ли ваши файлы - зависит от того форматировали вы диск во время установки или нет.
    Проверить это можно прямо в powershell командой dir например, просмотрев файловую систему.
    Так же, думаю, что Core можно проапгрейдить до версии с десктопом, установив соответствующие компоненты. Но это не точно.

    Для установки Вин 10 вам надо подготовить установочную флешку с ней и установить. Делать это, видимо, придется на другом компьютере. И если ваши файлы выжили после установки сервера, то и Вин10 надо устанавливать без форматирования.
    После всех этих приключений есть смысл скопировать чудом выжившие данные куда-нибудь и повторно установить Вин10 уже с форматированием, чтоб избавиться от хвостов всех предыдущих версий винды.

    Другой вариант. Если есть второй комп, физически подключаете диск ко второму компу, переносите туда все ваши сохранившиеся данные (если они сохранились), и устанавливаете Вин10 с форматированием.
  • Как сохранить значения нескольких переменных в С++ 17?

    @res2001
    Никита Савченко, Ссылки не устарели. Пока жив С++, думаю, ссылки не устареют. Это одна из главных фишек языка. Посмотрите сколько видов ссылок появилось в последних стандартах :-)
  • Как сохранить значения нескольких переменных в С++ 17?

    @res2001
    Никита Савченко, Нормальная затея. Просто вы ее не правильно реализовали. Если функция возвращает вектор, то и записать это значение можно в вектор, а не во что-то другое.
    vector<int> vec = getInfo(normal_weight, weight);
    normal_weight = vec[0];
    weight = vec[1];

    Но лучше std::pair, а еще лучше ссылки, как в ответе Александр Ананьев
    Посмотрите пример с tuplом
  • Почему не работает самоподписанный сертификат?

    @res2001
    RedFirefly, Клиенту надо добавить сертификат ЦА. И тогда:
    После этого все сертификаты, выпущенные в этом CA (и в его подчиненных CA, буде есть такие) - станут валидными.
  • Какую версию юзать для почтового сервера?

    @res2001
    AlexVWill, Аналогично и exim запускается не от рута. Думаю у postfix схема с открытием сокета та же (т.е suid бит и понижение привилегий после открытия сокета).
    По моему чтоб htop показывал эффективного пользователя процессов надо его запускать с каким-то ключом. Или это касается top... У меня сейчас нет линукса под рукой, не могу проверить.
    Идентификаторов владельца процесса 3 штуки: реальный, эффективный и сохраненный. Для манипуляций с понижением/повышением привилегий.
  • Какую версию юзать для почтового сервера?

    @res2001
    AlexVWill, Я упомянул про якобы проблему в безопасности, ты сказал, что рут не нужен. Я объяснил зачем нужен рут почтовику. Я не пложу сущности, а отвечаю на твои реплики.
    Или ты хочешь сказать, что программа может использовать 25 порт на линуксе без прав рута?
    В явном виде там рут и не используется, служба стартует из-под другого пользователя, но на исполняемом файле установлен suid бит, что дает процессу рутовые привилегии при запуске от любого пользователя. Возможно suid бит используется и в модуле postfix, отвечающего за открытие сокета. В exim я это сам проверял.
  • Что это означает?

    @res2001
    Zorroti, Если написать A(i, j) > 0 будет понятнее?
  • Какую версию юзать для почтового сервера?

    @res2001
    AlexVWill, Видимо, ты не занимался программированием сетевых приложений.
    Может не совсем корректно выразился, программа открывает сокет. Номер порта - это один из параметров сокета.
    Когда программа стартует ей надо сообщить системе, что она хочет работать с сокетом по TCP протоколу и использовать порт 25, для открытия сокета есть системный вызов socket(), а для задания параметров сокету есть вызов bind(). Там в параметрах адреса указывается номер порта, а уже внутри bind система проверяет, если запрошенный порт меньше 1024, то требует наличие у процесса рутовых прав.
    Процесс может быть запущен с рутовыми правами, сделать свои рутовые дела, а потом понизить права до какого-то другого пользователя, обычно имя этого пользователя как-то может быть сконфигурированно. Этот механизм используют все "правильные" приложения, работающие с "привилегированными" портами.

    Грубо говоря это как открыть файл. Права на файл - это правила фаервола, а открытие файла программой для его чтения или записи - аналогично открытию сокета для его использования.
  • Какую версию юзать для почтового сервера?

    @res2001
    AlexVWill,
    открытие порта делается через iptables/ufw

    Открытие открытию рознь.
    В фаерволе вы открываете порт, который слушает другая программа, чтоб пропускать трафик пришедший на этот порт к этой программе.
    В программе сервере (postfix, exim, любая другая) открывается этот порт для приема данных (которые выше пропустил фаервол). В Linux (и других никсах) для открытия программой портов ниже 1024 требуются права рута. Это политика работает по умолчанию. По моему ее можно отменить, но это не точно и обычно это никто не делает. А SMTP порт 25 - он меньше 1024, поэтому требуется рут.
  • Какую версию юзать для почтового сервера?

    @res2001
    Николай, Там чисто архитектурная разница. postfix модульный, exim монолит. Пишут, что при среднем количестве почтового трафика exim работает быстрее, пока в очередях не накапливается много писем. Для среднестатистического корпоративного почтовика разницы особой нет.
    Некоторые пишут, что exim работает от рута и это дыра в безопасности, но это не совсем так - root требуется только на этапе открытия 25 порта и для некоторых других действий, после этого привилегии понижаются. То же самое требуется и модулю postfixa, т.к. рутовые права для открытия порта для него никто не отменял. Другое дело, что у posfixa это небольшой модуль отвечающий за отдельно взятую задачу, а exim - он весь в одном исполняемом файле.
  • Какую версию юзать для почтового сервера?

    @res2001
    Вместо postfix можно использовать exim. Надежный, открытый продукт. Все остальное так же к нему успешно прикручивается.
  • Как пингануть хост, находящийся за NAT, но когда при этом на шлюзе есть ssh?

    @res2001
    Талян, В plink можно использовать сохраненный профиль соединения, который создается в putty, чтоб не вводить логин/пароль и прочие данные. По моему, в этом случае, никакого подтверждения не требовалось.
    Кстати, в питоне есть модули, реализующие протокол ssh, можно использовать их, чтоб не пользоваться сторонними утилитами. Контроля, возможно, будет больше. Например paramiko, наверняка есть и другие.