Статьи из рубрики «c-cpp» RSS

Советы и программы на C/C++ для разных операционных систем.

Дочерние рубрики:

Qt, libfcgi и многопоточность

Для создания приложений на есть библиотека libfcgi. Не буду вдаваться в дискуссию, зачем нужны приложения FastCGI на C/C++/подставить нужный язык, когда Python//Perl/подставить нужное гораздо удобнее. Отмечу лишь, что по работе понадобилось написать FastCGI-приложение на (в основном из-за наличия нескольких высокопроизводительных библиотек, написанных на , но не суть).

Строго говоря, libfcgi, хотя и является официальной библиотекой от создателей протокола, не лучший вариант для поддержки FastCGI — API, предоставляемое библиотекой, сильно ограничено (в плане функциональности) и недостаточно гибко. Далее »

Автор: , опубликовано в: Qt, комментариев: нет
8
Янв
2012

HTML Parser для Qt

 — это, конечно, хорошо, но очень часто требуется разбирать документы , которые могут и не быть валидными.

В есть множество классов для работы с XML, но они не подходят для HTML, так как ошибки в HTML для них фатальны.

Ниже приведён вариант парсера для HTML, основанный на библиотеке libxml2. Далее »

Автор: , опубликовано в: Qt, комментариев: 3
7
Сен
2011

OpenMP, параллельный режим и утечки памяти в GNU Standard C++ Library

Стандартнуя библиотека GNU языка C++ поддерживает так называемый параллельный режим, который предоставляет экспериментальную поддержку параллельных алгоритмов из <algorithm> и <numeric>. Для включения данного режима исходный код нужно компилировать с опеределённым макросом _GLIBCXX_PARALLEL, либо явно подключать заголовочные файлы из <parallel/> и использовать пространство имён __gnu_parallel.

В параллельном режиме для реализации параллелизма используется .

Как оказалось, при использовании в своей программе OpenMP и параллельного режима libstdc++ можно столкнуться с очень неприятными и недокументированными особенностями реализации и получить незабываемое «удовольствие» при отладке. Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
14
Май
2011

k-путевое слияние на C++

Алгоритмы слияния — семейство алгоритмов, последовательно обрабатывающие отсортированные списки и генерирующие один или более отсортированных списков на выходе. Слияние используется в алгоритме сортировки слиянием (например, функция bitonic_merge() в алгоритме битонной сортировки).

k-путевое слияние использует k отсортированных списков; в данном примере генерируется один выходной список, размер которого равен размеру всех входных списков.

k-путевое слияние может быть очень эффективно при сортировке очень больших объёмов данных: большой исходный файл разбивается на несколько файлов меньшего размера, каждый из которых можно отсортировать в оперативной памяти; после сортировки получается n отсортированных файлов. Над отсортированными файлами выполняется многопутевого слияния (возможно, в несколько этапов), на выходе получается отсортированный исходный файл.

Как сортировку, так и слияние можно выполнять параллельно (например, при использовании быстрой сортировки можно использовать конструкцию task из  3.0; слияния же можно проводить в несколько потоков потоков — например, 100 файлов можно отсортировать в 4 потока, используя 25-путевое слияние — правда, это создаст дополнительную нагрузку на диск). Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
6
Май
2011

Bitonic Mergesort на C++

Битонная слиянием (bitonic mergesort) — параллельный алгоритм сортировки, рекурсивно разделяющий входную последовательность на сортированные последовательности меньшего размера.

Алгоритм битонной сортировки может выполняться параллельно, потому что каждая операция разделения независима от всех других операций.
Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
16
Апр
2011

Пример рабочей реализации QDomDocument::elementById

Так сложилось, что в реализация метода QDomDocument::elementById() нерабочая: при попытке использования данного метода выдаётся предупреждение elementById() is not implemented and will always return a null node и возвращается пустой элемент .

Временами это очень неудобно: например, вместо использования из QXmlPatterns может быть проще получить элемент DOM по его id и пройтись по его потомкам. А при использовании XPath функцию id() использовать не получится в силу тех же причин. Далее »

Автор: , опубликовано в: Qt, комментариев: 4
19
Мар
2011

Scope Guard средствами C++0x: часть 2

В прошлой части была рассмотрена реализация Scope Guard средствами . Благодаря шаблонам с переменным количеством параметров (variadic templates), реализация на получилась несколько проще, чем в оригинале, так как один и тот же шаблонный класс может использоваться для создания с различным количеством параметров.

Но, как было отмечено, предыдущая реализация не являлась оптимальной в плане количества строк. Можно сделать проще и короче. Далее »

Автор: , опубликовано в: C/C++, комментариев: 4
26
Апр
2010

Scope Guard средствами C++0x: часть 1

Scope Guard — одно из средств автоматического освобождения ресурсов при выходе за пределы видимости переменной, с ними связанной. предоставляет базовую гарантию безопасности исключений. Авторами этой идеи (по-видимому) являются Andrei Alexandrescu и Petru Marginean. Если вы с этой статьёй еще не знакомы, то очень рекомендую к прочтению.

Реализация Scope Guard довольно простая, но из-за того, что C++ не поддерживал шаблоны с переменным количеством параметров, приходилось создавать несколько шаблонов — в зависимости от того, сколько аргументов принимает функция, выполняющая освобождение ресурсов. Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
23
Апр
2010

Патч для php-cgi, позволяющий конфигурировать значение listen backlog

По умолчанию значение listen backlog в -cgi жёстко задано — 128. Это означает, что не сможет обработать более 128 запросов одновременно (точнее, что очередь запросов не сможет превысить данного значения). Я столкнулся с тем, что 128 — это мало.

Для тех, кто столкнулся с данной проблемой, но по каким-либо причинам не хочет/не может поставить php-fpm (в котором backlog конфигурируется), я сделал небольшой . Далее »

Автор: , опубликовано в: C/C++, PHP, комментариев: 10
3
Янв
2010

Модуль поддержки tcpwrappers для nginx

 — система контроля доступа, используемая для ограничения доступа к серверам на UNIX-подобных операционных системах (, BSD). Контроль доступа может осуществляться, например, по имени хоста (полному или частичному), адресу, подсети. Подробности приведены здесь.

TCP Wrappers очень удобно использовать с программами для защиты от червей (BlackHosts, DenyHosts, Fail2ban), в частности, для защиты от HTTP-сканирования.

Огромным достоинством TCP Wrappers является возможность динамической конфигурации списков контроля доступа (что избавляет от необходимости перезапускать защищаемый сервис) и простота файлов конфигурации (это субъективно).

К сожалению, не поддерживает TCP Wrappers из коробки. К счастью, это можно исправить. Далее »

Автор: , опубликовано в: C/C++, nginx, Администрирование, Безопасность, комментариев: 2
10
Окт
2009