Как стать автором
Обновить
136.02

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Как решить проблему 10 000 соединений?

Время на прочтение1 мин
Количество просмотров28K


Способы решения этой проблемы, поднятой еще в 2001 году программистом Дэном Кегелем, рассматриваются в девятой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». За подробностями – добро пожаловать под кат.
Читать дальше →
Всего голосов 33: ↑30 и ↓3+27
Комментарии37

Как сделать программу нетерпеливой?

Время на прочтение1 мин
Количество просмотров11K


Программы, которые были написаны в прошлых лекциях курса «Сетевое программирование в UNIX», обладали бесконечным запасом терпения, то есть беспрекословно ждали, пока не поступят данные для обработки. В новой лекции вы узнаете, как ограничить терпение программы определенными временными рамками.
Читать дальше →
Всего голосов 30: ↑23 и ↓7+16
Комментарии6

Эффективное чтение

Время на прочтение1 мин
Количество просмотров11K


Настало время для седьмой лекции курса «Сетевое программирование в UNIX», подготовленного специалистами SkyDNS и компании «Айдеко». Автор курса Александр Патраков объясняет студентам, как ускорить чтение небольших порций данных из сокета.
Читать дальше →
Всего голосов 9: ↑5 и ↓4+1
Комментарии7

Асинхронные запросы к MySQL на API (libmysqlclient)

Время на прочтение3 мин
Количество просмотров6.4K
Так получается, что сейчас тружусь над планировщиком для MySQL соединений. И тут недавно пришлось покапаться в документации/блогах и т.д. И вот решил поделиться с сообществом как реализовать асинхронные запросы к MySQL серверу на С++ используя API и библиотеку libmysqlclient.

Читать дальше →
Всего голосов 24: ↑21 и ↓3+18
Комментарии46

Истории

Реализация разделяемой памяти между драйвером и приложением

Время на прочтение6 мин
Количество просмотров9.7K

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

Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии6

Использование сети CAN и стека CANopen

Время на прочтение6 мин
Количество просмотров42K
Однажды передо мной встала задача разработать встраиваемую систему, в которой бы данные могли передаваться между узлами c максимальной надежностью. Тогда то я впервые и узнал о CAN.

В этой статье я хотел бы рассказать вкратце рассказать о том, что такое CAN и о своем опыте работы с ним. Возможно люди, которые занимаются разработкой встраиваемых систем, прочитав мою статью, заинтересуются этим стандартом, если он еще не попадал в их поле зрения. Тем более, что контроллеры CAN в настоящее время присутствуют на многих микроконтроллерах.

CAN (Controller Area Network) — это стандарт, созданный компанией Bosсh для сетей, используемых в автоматизации и промышленности. Стандарт нашел широкое применение в промышленном производстве, технологиях «умного дома», а так же в автомобилестроении. Очень хорошо подходит для связывания различных датчиков и управляющих устройств в единую сеть.
Как правило, CAN-сеть это сеть типа «шина», в которой все узлы могут передавать и принимать данные.
Она обладает небольшой скоростью, но высокой надежностью.

Далее я хочу поверхностно описать стандарт и рассказать об использовании такой сети на практике.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии11

Многозадачность в микроконтроллерах на основе продолжений

Время на прочтение8 мин
Количество просмотров27K
Программисты C и так не избалованы возможностями языка, а разработчики встроенных систем на микроконтроллерах ограничены еще больше, зачастую их программы работают на голом железе, без поддержки ОС.
Возможность использования в С сопрограмм, генераторов, кооперативной многозадачности часто может сильно упростить программу и сэкономить силы, но эти возможности языка не очевидны и многие про них не знают.
Продолжения (contionuation) позволяют запомнить состояние выполнения программного потока (функции), и вернуться к этому месту в дальнейшем.
Используя продолжения, мы можем получить сопрограммы (coroutine), а это уже практически готовые генераторы, итераторы и кооперативная многозадачность.
Читать дальше →
Всего голосов 67: ↑66 и ↓1+65
Комментарии12

Итоги 20-го международного конкурса непонятного кода на C

Время на прочтение2 мин
Количество просмотров15K
Организаторы IOCCC (Международный конкурс на самый непонятный код C) нажали кнопку «турбо». Если результаты прошлого конкурса опубликовали спустя четыре года после проведения, теперь прошло всего два месяца — и вот они.

Участвовать в конкурсе могут готовые программы размером меньше 4096 байт, при этом количество значимых символов, без учёта пробелов, знаков табуляции и знаков ; ( ), не должно превышать 2048. Задачей конкурса является «проверять компиляторы на стресс, демонстрировать тонкости языка программирования Си и важность соблюдения стиля программирования (делая обратное)».
Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии29

Расставим точки над структурами C/C++

Время на прочтение4 мин
Количество просмотров264K
Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: во-первых я не Господи, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…


Читать дальше →
Всего голосов 125: ↑90 и ↓35+55
Комментарии82

Кросс-платформенные многопоточные приложения

Время на прочтение6 мин
Количество просмотров15K
Для создания переносимых многопоточных приложений предлагаю воспользоваться библиотекой Glib.
Glib — это достаточно большая кросс-платформенная библиотека, которая, кроме потоков, включает в себя поддержку интернационализации, работу со строками, массивами, файлами, таймерами, и много чего другого, вплоть до XML парсера и поддерки .ini конфигурационных файлов.
В тоже время эта библиотека достаточно маленькая и почти не имеет зависимостей, что позволяет без особых проблем включать её в Windows-проекты, а в unix-подобных системах Glib уже есть.
Читать дальше →
Всего голосов 32: ↑25 и ↓7+18
Комментарии61

Реализация exceptions на plain C

Время на прочтение4 мин
Количество просмотров6.7K
Продолжение вот этой статьи habrahabr.ru/post/131212, где я собирался показать, как «и ошибки удобно обрабатывать и exceptions при этом не использовать», да всё руки не доходили.

Итак, будем считать, что у нас ситуация, что «настоящие C++ exceptions» использовать нельзя — например, языком разработки является C или компилятор С++ для нашей платформы не поддерживает exceptions (или формально поддерживает, а реально этим пользоваться нельзя). Это, конечно, нетипично для desktop приложений, но вполне обычно для embedded разработки.
Читать дальше →
Всего голосов 47: ↑39 и ↓8+31
Комментарии50

Насколько большие массивы (и значения) в PHP? (Подсказка: ОЧЕНЬ БОЛЬШИЕ)

Время на прочтение7 мин
Количество просмотров30K
В этой статье я хочу исследовать расход памяти у массивов (и значений в целом) в PHP используя следующий скрипт в качестве примера, который создаёт 100 000 уникальных целочисленных элементов массива и в конце измеряет количество использованной памяти.
Читать дальше →
Всего голосов 114: ↑109 и ↓5+104
Комментарии58

Отладка программ на C для начинающих

Время на прочтение3 мин
Количество просмотров32K
… или что делать если «Hello world!» упала.

Всё последующее в основном написано для ОС Linux и консольной отладки, хотя кое-что можно использовать и в других условиях.
Читать дальше →
Всего голосов 77: ↑51 и ↓26+25
Комментарии64

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Загадочный язык программирования фреймворка Duqu определён

Время на прочтение2 мин
Количество просмотров7.6K
Две недели назад специалисты «Лаборатории Касперского» обратились к сообществу с просьбой помочь определить язык программирования, на котором написана троянская программа Duqu. Обнаруженная в октябре 2011 года, она до сих пор ставила в тупик экспертов.

«Лаборатория Касперского» сначала обратились к экспертам по реверс-инжинирингу, но те ничем не смогли помочь. Ясно было, что язык программирования — определённо не C++, не Objective C, не Java, не Python, не Ada, не Lua и ещё не 30 других языков программирования, которые они проверили. После нескольких месяцев безуспешных попыток анализа оставалось только предположить, что ключевой фрагмент вредоносной программы написан на неком неизвестном языке.

Однако, благодаря помощи сообщества эту головоломку всё-таки удалось решить.
Читать дальше →
Всего голосов 86: ↑70 и ↓16+54
Комментарии44

Собираем свою Bluetooth машинку с управлением на Android

Время на прочтение4 мин
Количество просмотров36K
На последней сессии я как обычно тщательно готовился к экзаменам (то есть не знал, чем себя занять), и как по счастливой случайности, у меня образовалась радиоуправляемая машинка, большая и красивая, хотя и явно рассчитанная на детей. Поигравшись минут десять, я захотел ее модернизировать, а именно вместо неудобного джойстика с радиусом действия в 3 метра использовать коммуникатор с bluetooth. И удобнее, и дальность действия больше, и явно видны дальнейшие улучшения, о которых, как впрочем и о процессе прикручивания коммуникатора к детской машинке, и пойдет речь в данной статье.



Читать дальше →
Всего голосов 45: ↑39 и ↓6+33
Комментарии18

Виртуальные функции в C

Время на прочтение4 мин
Количество просмотров29K
Недавно мне задали вопрос: как бы я реализовал механизм виртуальных функций на языке C?

Поначалу я понятия не имел, как это можно сделать: ведь C не является языком объектно-ориентированного программирования, и здесь нет такого понятия, как наследование. Но поскольку у меня уже было немного опыта с C, и я знал, как работают виртуальные функции, я подумал, что должен быть способ сымитировать поведение виртуальных функций, используя структуры (struct).

Краткое пояснение для тех, кто не знает, что такое виртуальные функции:
Виртуальная функция — это функция, которая может быть переопределена классом-наследником, для того чтобы тот имел свою, отличающуюся, реализацию. В языке C++ используется такой механизм, как таблица виртуальных функций
(кратко vtable) для того, чтобы поддерживать связывание на этапе выполнения программы. Виртуальная таблица — статический массив, который хранит для каждой виртуальной функции указатель на ближайшую в иерархии наследования реализацию этой функции. Ближайшая в иерархии реализация определяется во время выполнения посредством извлечения адреса функции из таблицы методов объекта.


Давайте теперь посмотрим на простой пример использования виртуальных функций в C++
Читать дальше →
Всего голосов 36: ↑29 и ↓7+22
Комментарии54

Я не знаю Си

Время на прочтение4 мин
Количество просмотров50K
Цель этой статьи — заставить всех, особенно программистов на Си, сказать «я не знаю Си».
Хочется показать, что тёмные углы в Си значительно ближе, чем кажется и даже тривиальные строки кода несут в себе undefined behavior.
Читать дальше →
Всего голосов 285: ↑268 и ↓17+251
Комментарии309

«The Simdsons» — финал

Время на прочтение5 мин
Количество просмотров9.2K
image
Знаете ли вы, что Гомер Симпсон, глава семейства «The Simpsons», когда-то действительно официально работал на компанию Интел, причем довольно успешно? А именно, он рекламировал пончики процессор Pentium II. Посмотреть, как это было, можно здесь.
Ну а под катом можно посмотреть завершение предыдущего поста с 21 любопытными фактами про Intel SIMD.

Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии18

«The Simdsons» — немного о семействе векторных инструкций SIMD

Время на прочтение4 мин
Количество просмотров14K
image
Когда я впервые увидела этот мультфильм, то абсолютно не впечатлилась. Какие-то желтые (хорошо хоть не зеленые) человечки с выпученными глазами, сюжет не особенно интересный, шутки несмешные…

Но вскоре все радикально изменилось. Нет, «Симпсоны» остались теми же, зато я провела около месяца в командировке в мир Симпсонов — США, где наконец поняла, почему этот сериал многие считают лучшим. «The Simpsons» — действительно прекрасная пародия на американский образ жизни от мелочей до глобальных вопросов, это и юмор и философия и еще много отличных поводов для просмотра.

К чему это я? А к тому, что наверняка первое знакомство с семейством векторных инструкций SIMD (и, в частности, SSE) многих программистов не впечатлило. Какие-то новые инструкции с выпученными длинными регистрами, одновременно работающие над группой данных, возни много, а толку, скорее всего, мало…

Попробую радикально изменить это представление. Нет, я не буду убеждать вас, что SSE — прекрасное средство оптимизации приложений. Пойду другим путем. В Симпсонах — 21 сезон (кстати, это — самый длинный сериал в истории американского ТВ). В честь этого я приведу 21 интересный факт про Intel SIMD. Надеюсь, что действительно интересный — даже знатокам SIMD.
Читать дальше →
Всего голосов 61: ↑47 и ↓14+33
Комментарии26

Оптимизация процесса создания unit-тестов

Время на прочтение6 мин
Количество просмотров4.7K
Всем привет! Хабраюзер shai_xylyd написал статью про аспекты тестирования, где им были рассмотрены некоторые понятия и ценности TDD. В частности, он упомянул очень интересный способ создания первичных юнит-тестов — когда функциональный код пишется совместно с кодом юнит-теста, чем меня очень заинтриговал.

Дело в том, что я (как программист), нахожусь в состоянии переходного процесса между «классической» разработкой и разработкой test-driven, поэтому всякими способами ищу возможности упростить и сделать более естественной последнюю. После пары приседаний, сразу включиться в методику shai_xylyd не сумел. Начал переписку с автором статьи, где он натолкнул меня на мысль подойти к решению с математической точки зрения. Идея в том, чтобы воспользоваться функциональным пространством среды программирования и «разложить» написание юнит-теста на составляющие. После чего сделать выводы.
Немного математики, а потом пример
Всего голосов 22: ↑18 и ↓4+14
Комментарии17
12 ...
78

Вклад авторов

Работа

Программист С
35 вакансий