Никита Савченко, Нормальная затея. Просто вы ее не правильно реализовали. Если функция возвращает вектор, то и записать это значение можно в вектор, а не во что-то другое.
AlexVWill, Аналогично и exim запускается не от рута. Думаю у postfix схема с открытием сокета та же (т.е suid бит и понижение привилегий после открытия сокета).
По моему чтоб htop показывал эффективного пользователя процессов надо его запускать с каким-то ключом. Или это касается top... У меня сейчас нет линукса под рукой, не могу проверить.
Идентификаторов владельца процесса 3 штуки: реальный, эффективный и сохраненный. Для манипуляций с понижением/повышением привилегий.
AlexVWill, Я упомянул про якобы проблему в безопасности, ты сказал, что рут не нужен. Я объяснил зачем нужен рут почтовику. Я не пложу сущности, а отвечаю на твои реплики.
Или ты хочешь сказать, что программа может использовать 25 порт на линуксе без прав рута?
В явном виде там рут и не используется, служба стартует из-под другого пользователя, но на исполняемом файле установлен suid бит, что дает процессу рутовые привилегии при запуске от любого пользователя. Возможно suid бит используется и в модуле postfix, отвечающего за открытие сокета. В exim я это сам проверял.
AlexVWill, Видимо, ты не занимался программированием сетевых приложений.
Может не совсем корректно выразился, программа открывает сокет. Номер порта - это один из параметров сокета.
Когда программа стартует ей надо сообщить системе, что она хочет работать с сокетом по TCP протоколу и использовать порт 25, для открытия сокета есть системный вызов socket(), а для задания параметров сокету есть вызов bind(). Там в параметрах адреса указывается номер порта, а уже внутри bind система проверяет, если запрошенный порт меньше 1024, то требует наличие у процесса рутовых прав.
Процесс может быть запущен с рутовыми правами, сделать свои рутовые дела, а потом понизить права до какого-то другого пользователя, обычно имя этого пользователя как-то может быть сконфигурированно. Этот механизм используют все "правильные" приложения, работающие с "привилегированными" портами.
Грубо говоря это как открыть файл. Права на файл - это правила фаервола, а открытие файла программой для его чтения или записи - аналогично открытию сокета для его использования.
Открытие открытию рознь.
В фаерволе вы открываете порт, который слушает другая программа, чтоб пропускать трафик пришедший на этот порт к этой программе.
В программе сервере (postfix, exim, любая другая) открывается этот порт для приема данных (которые выше пропустил фаервол). В Linux (и других никсах) для открытия программой портов ниже 1024 требуются права рута. Это политика работает по умолчанию. По моему ее можно отменить, но это не точно и обычно это никто не делает. А SMTP порт 25 - он меньше 1024, поэтому требуется рут.
Николай, Там чисто архитектурная разница. postfix модульный, exim монолит. Пишут, что при среднем количестве почтового трафика exim работает быстрее, пока в очередях не накапливается много писем. Для среднестатистического корпоративного почтовика разницы особой нет.
Некоторые пишут, что exim работает от рута и это дыра в безопасности, но это не совсем так - root требуется только на этапе открытия 25 порта и для некоторых других действий, после этого привилегии понижаются. То же самое требуется и модулю postfixa, т.к. рутовые права для открытия порта для него никто не отменял. Другое дело, что у posfixa это небольшой модуль отвечающий за отдельно взятую задачу, а exim - он весь в одном исполняемом файле.
Талян, В plink можно использовать сохраненный профиль соединения, который создается в putty, чтоб не вводить логин/пароль и прочие данные. По моему, в этом случае, никакого подтверждения не требовалось.
Кстати, в питоне есть модули, реализующие протокол ssh, можно использовать их, чтоб не пользоваться сторонними утилитами. Контроля, возможно, будет больше. Например paramiko, наверняка есть и другие.
Алгоритм элементарный. Функций разрешенных для использования достаточно. Читать придется посимвольно с помощью fgetc. В цикле до конца файла читаете очередной символ, сравниваете с первым символом строки, если равны, то следующий символ нужно сравнивать со вторым символом строки и т.д.
Другое дело, что читать посимвольно из файла - это плохая идея. Правильнее было бы читать файл большими кусками, скажем по 4 Кб или больше, и искать строку в прочитанном куске. Но задание есть задание.
Вы сделайте собственную попытку реализации алгоритма, если будут затруднения, можете писать сюда конкретные вопросы.
А сейчас ваш вопрос это задание - это противоречит правилам ресурса.
Чем стандартные сортировки не устраивают? В стандартной библиотеке несколько вариантов, выбирайте.
Ваша задача сортировки ничем особым не отличается от любых других сортировок.
Правда из описания не понятно что вы в итоге хотите получить. Вам надо сортировать каждый столбец отдельно?
Приведите пример исходной и отсортированной матрицы для ясности.
shledon, Конечно. Для этого открытый ключ ЦА всегда должен быть в доступе.
Фактически ЦА нужен только на этапе подтверждения сертификата или отзыва сертификата и формирования нового списка отзывов. Все остальное время его можно держать выключенным.
Зато когда истекает срок действия сертификата ЦА - все дерево сертификатов, подписанное его сертификатом протухает. К этому событию надо готовится отдельно :-)
iihaarr, Интересно, для чего вам указатель в vector<char>?
я получу указатель на а?
Нет. data возвращает указатель на первый элемент массива внутри вектора, в вашем случае возвращает char* Вы получаете указатель на содержимое arr, а не само содержимое.
Это потому что, скорее всего, в вашем компиляторе размер bool 4 байта. Стандарт не определяет размер bool.
Смысл подобных битовых полей в том, что на указанном типе данных выделяются биты/группы битов. Но память все равно выделяется под указанный тип данных (а не под биты). Если одного поля указанного типа будет не достаточно, чтобы вместить все биты, то компилятор добавит еще одно поле и т.д. В вашем примере правильней использовать uint8_t, тогда размер будет 1 байт. Для доступа к таким полям компилятор сам генерирует соответствующие битовые операции. При желании их можно увидеть в ассемблерном коде, вашей программы. В любом случае, как бы вы не определяли битовые поля на прямую с битами вы работать не можете, только через битовые операции. Правда подобное определение битовых полей скрывает этот факт и создает иллюзию прямого доступа к битам. Кстати, еще один момент, на битовое поле нельзя получить ссылку - это следствие того, что биты не возможно адресовать (и взять адрес битового поля).
Подобные битовые поля - не универсальный вариант. Если вам понадобится другое количество битов, то придется менять структуру. Если нужен будет динамический размер битового поля, то вообще подобный вариант - не вариант. Правда в этом случае придется самому писать функции для доступа к битам по их номеру. Но это не большая проблема.
Либо это дохнет диск, либо глюки в винде.
Чтобы исключить диск сделайте тест поверхности с загрузочной флешки (не из вашей винды).
С виндой может быть сложно - самый простой вариант переустановка.
Посмотрите в менеджере задач и мониторе ресурсов, что происходит с ОС, в момент зависания копирования.
Может быть какой-то процесс тянет одеяло на себя, или возможно загрузка дисковых очередей на максимумах.
Для информации: в цикле for не обязательно переменную цикла инициализировать нулем, а так же не обязательно делать инкремент переменной цикла - можно делать произвольную операцию (операции). Конкретно к вашей задаче для обхода только нечетных элементов массива можно использовать такой цикл: for (int i=1; i<16; i+=2)
Для отображения сетевого окружения винда использует широковещательные запросы. Широковещательные пакеты обычно не маршрутизируются между сетями, поэтому ответы на эти запросы из ВПН не приходят (потому что запросы туда не попадают).
Если получится сделать "мост" между реальным сетевым адаптером и "ВПН адаптером", то это будет единая сеть и широковещательные пакеты будут проходить. При этом надо сделать так, чтобы компы в ВПН и компы в ЛВС были в одной и той же IP сети. Теоретически это можно сделать, практически - не пробовал, возможна масса подводных камней.
Другой вариант - настроить между ЛВС и ВПН proxy-arp.
Поле user_id текстовое? Поиск по тексту медленнее чем по числовым значениям.
Как уже тут все писали - добавить индексы по полям, участвующим во фразе where.
Индексация полей - это то благодаря чему ускоряются операции поиска в таблице. Без индексов кардинально вы ничего не измените.
Но лучше std::pair, а еще лучше ссылки, как в ответе Александр Ананьев
Посмотрите пример с tuplом