Как стать автором
Обновить
95.47
Рейтинг

C *

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

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

Что там у PVS-Studio c покрытием Toyota ITC Benchmark?

Блог компании PVS-Studio Информационная безопасность *C++ *C *

Toyota ITC Benchmark – это набор синтетических тестов для C и C++, состоящий приблизительно из 650 примеров и предназначенный для тестирования анализаторов кода. Данная статья ответит на вопрос: "Насколько хорошо статический анализатор PVS-Studio покрывает Toyota ITC Benchmark?".

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 1.4K
Комментарии 3

Новости

STM32. Про синус

Алгоритмы *C *Промышленное программирование *Программирование микроконтроллеров *

Тригонометрические функции, характеризующиеся высоким потреблением процессорного времени, могут негативно влиять на выбор бюджетных микроконтроллеров ( без модуля FPU ) для задач, где важна скорость счёта, например, контроль пространственного положения.

Читать далее
Всего голосов 52: ↑52 и ↓0 +52
Просмотры 6.9K
Комментарии 66

Удивительное приключение в стране оптимизирующих компиляторов

Python *Программирование *C++ *Lisp *C *

Приглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.

Читать далее
Всего голосов 59: ↑58 и ↓1 +57
Просмотры 17K
Комментарии 71

Баг в ядре Linux и как правильно жаловаться

Open source *Системное программирование **nix *C *Параллельное программирование *

Я работаю системным программистом в компании КриптоПро. Нередко мои задачи связаны с ошибками, которые лежат на самом нижнем уровне современных операционных систем, под которые мы пишем ПО. Я хочу поведать тебе, Хабр, об одной из таких ошибок и о том, как я жаловался на неё разработчикам.

Я отвечаю за поддержку одной из наших библиотек с C-интерфейсом, написанной на C и C++. Мой коллега из другого отдела сообщил, что его нагрузочный тест нашей библиотеки на C# в Linux выдаёт ошибку в хитром сценарии: нужно иметь два процесса по пять потоков, делающих некоторые идентичные вызовы. Если процесс один, а потоков много, то проблема не проявляется. Если процессов два, но в каждом по одному потоку, то проблема не проявляется. Путём просмотра исходников нагрузочного теста и логов работы библиотеки удалось перенести проблему в маленький юнит-тест на C++ с использованием нашего API.

Узнать, что же это было
Всего голосов 93: ↑89 и ↓4 +85
Просмотры 12K
Комментарии 38

Извлечение истории воспроизведения из медиабиблиотеки проигрывателя Winamp

Восстановление данных *C *Реверс-инжиниринг *
Давным-давно, когда не было современных гаджетов и интернетов, большинство пользователей компьютеров слушали музыку «оффлайн» при помощи различных проигрывателей. Один из самых популярных и распространённых – Winamp.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 2K
Комментарии 7

Основы работы отечественных МК 1986ВЕ1Т с болгарскими отладчиками OLIMEX ARM-USB-OCD-H. Часть 2 — RAM & Interruptions

Отладка *C *Программирование микроконтроллеров *Процессоры
Tutorial

Изначально вторая главазадумывалась только, как шпаргалка по работе из оперативной памяти, но делать и разбираться в этом не очень трудно. Основная "запара" может настигнуть несведущего именно при работе с прерываниями. Собсна, решено объединить.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 2.8K
Комментарии 1

Как начать писать программный код Си в ОС Linux (Руководство для совсем начинающих)

C++ *Системное программирование **nix *C *Разработка под Linux *
Из песочницы

Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux, или может быть долго были пользователями ОС Windows. Я попробую здесь показать прямое руководство к действию на примере ОС Ubuntu и тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux.

Читать далее
Всего голосов 25: ↑17 и ↓8 +9
Просмотры 22K
Комментарии 37

C/C++ из Python (ctypes) на Android

C *C++ *Python *Разработка под Android *
Tutorial
main

Ранее я писал статью C/C++ из Python (ctypes), в ней описывается процесс запуска на Linux. На этот раз мне понадобилось повторить это уже на Android. В этой статье речь пойдет о сборке, необходимых инструментах, механизмах отладки и установки.

Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3.6K
Комментарии 2

Masscan с поддержкой HTTPS

Блог компании BI.ZONE Информационная безопасность *Open source *Проектирование и рефакторинг *C *

Masscan — быстрый сетевой сканер, который хорошо подходит для сканирования большого диапазона IP-адресов и портов. Мы немного доработали его, адаптировав под свои нужды.

Больше всего неудобств оригинала было связано с невозможностью собирать баннеры с HTTPS-серверов. А что такое современный веб без HTTPS? Особо ничего не насканируешь. Это и смотивировало нас изменить masscan. Как обычно бывает, одна маленькая доработка переросла в другую, обнаружились баги. Теперь мы хотим поделиться нашими наработками с сообществом. Все изменения, о которых пойдет речь, уже доступны в нашем репозитории на GitHub.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 2.7K
Комментарии 0

DevOps для производства Firmware

Программирование *C *Программирование микроконтроллеров *DevOps *DIY или Сделай сам

В этом тексте я намерен пофантазировать каким мог бы быть абстрактный процесс разработки firmware с точки зрения DevOps. И перечислить атрибуты такого процесса.

Читать далее
Всего голосов 12: ↑9 и ↓3 +6
Просмотры 3.7K
Комментарии 18

Баги в Hello World

Python *Программирование *Совершенный код *C *
Перевод

Hello World, должно быть, самая часто создаваемая компьютерная программа. Уже десятилетия это первая программа, которую пишут люди, когда начинают изучение нового языка программирования.

Конечно же эта простая программа не должна иметь баги. Верно?

Читать далее
Всего голосов 31: ↑25 и ↓6 +19
Просмотры 7.9K
Комментарии 20

Простая программная генерация видео и картинок без стороннего API

Python *Программирование *C++ *C *Компьютерная анимация *
Tutorial

В этой статье я покажу простой способ генерации видео программами на Python и C/C++ без использования стороннего API. Вам так же потребуется ffmpeg, без него вы не сможете конвертировать файлы в читаемые форматы!

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 3.1K
Комментарии 3

9 атрибутов хорошего firmware

Программирование *C *Программирование микроконтроллеров *DevOps *DIY или Сделай сам

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

Читать далее
Всего голосов 56: ↑51 и ↓5 +46
Просмотры 11K
Комментарии 97

Утилита времен «динозавров»: история системного вызова chroot и его применение в современности

Блог компании Selectel *nix *C *История IT

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

Этот простой системный вызов подменяет местонахождение «корня» файловой системы, «заключая» программу в специально созданное ограниченное окружение. Самая распространенная ситуация — восстановление загрузки операционной системы с помощью live-образа. Но при создании chroot о таком применении не задумывались.

Чтобы найти истоки появления chroot в *NIX-подобных операционных системах, нужно пройти немалый путь по истории IT. В этой статье я расскажу про появление chroot и его применение в современном мире. А еще покажу проекты, которые позволяют прикоснуться к операционным системам эпохи, когда Интернета не было.
Читать дальше →
Всего голосов 106: ↑105 и ↓1 +104
Просмотры 13K
Комментарии 8

Основы работы отечественных МК 1986ВЕ1Т с болгарскими отладчиками OLIMEX ARM-USB-OCD-H. Часть 1 — Первый запуск

Отладка *C *Программирование микроконтроллеров *
Из песочницы
Tutorial

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

Читать далее
Всего голосов 21: ↑20 и ↓1 +19
Просмотры 7.1K
Комментарии 14

Умный malloc для С

Программирование *C *

Экспериментировал на С и повторил операторы new и delete средствами языка. В этой статье расскажу как я к этому пришёл, зачем это нужно, и как оно работает.

Читать далее
Всего голосов 21: ↑7 и ↓14 -7
Просмотры 5.7K
Комментарии 20

MuditaOS: Зазвонит ли ваш будильник? Часть 2

Блог компании PVS-Studio C++ *C *

Это вторая часть цикла статей про проверку операционной системы MuditaOS. В ней мы поговорим об узких местах в проекте, которые стоит отрефакторить. В этом нам поможет статический анализатор PVS-Studio и его оптимизационные предупреждения.

Читать далее
Всего голосов 9: ↑6 и ↓3 +3
Просмотры 1.6K
Комментарии 4

arr[-1] или самые редкие конструкции в С

Программирование *C *
Из песочницы

Топ 22 самых редких конструкций языка С. От макросов с аргументами до каламбура типов - найдётся применение каждой. tmpfile() вступает в силу!

Читать далее
Всего голосов 54: ↑37 и ↓17 +20
Просмотры 16K
Комментарии 169

Настройка VSCode для отладки китайского RISC-V SoC

C *Программирование микроконтроллеров *Разработка для интернета вещей *Интернет вещей Носимая электроника

Я всей душой люблю малоизвестных производителей. Зачастую их продукты имеют фичи, недоступные у их более именитых конкурентов, по очень интересной цене (однажды меня очень выручило наличие встроенной в SoC полуамперной зарядки для аккумулятора и нескольких LDO, способных запитать всю периферию). Кроме того, сроки и условия поставки какого-нибудь Nanjing Qinheng Microelectronics могут приятно удивить разработчиков, привыкших за последние два ковидных года к конскому ценнику и 52+ неделям доставки на ST, TI, Nordic и прочие привычные вещи. Логистика становится особенно приятной, если массовое производство планируется в Китае и на площадке присутствует ваша китайская команда, способная разрулить возникающие проблемы. Да и доставка из Шеньчженя в Шеньчжень проще и предсказуемей, чем со склада глобального дистрибьютора и растаможка в России.

Погрузиться в дивный мир
Всего голосов 20: ↑17 и ↓3 +14
Просмотры 3.6K
Комментарии 7

Как кушать вилкой

Системное программирование *C *

...или о fork() в двух словах.

Как люди решают задачи

Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.

¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"

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

Однако мы отвлеклись. Поставим перед собой задачу:

Нам необходимо наиболее правильным способом запустить из своего кода другую программу.

Не так важно, зачем. Это может быть запуск игры из лаунчера, запуск утилиты ping чтобы не реализовывать отправку ICMP-пакетов самостоятельно, запуск программы по клику на ярлык, миллион вариантов, думаю, что вы сами хотя бы раз в жизни сталкивались с такой задачей.

Содержание статьи

* Как кушать пингвина вилкой?
Общие знания о запуске процессов под LINUX-системами
*
Как кушать корову если есть вилка?
Copy-on-write, что это и зачем? vfork и почему он не лучше
*
Как кушать икру?
posix_spawn и почему он не замещает fork()
*
Как кушают клоны?
clone() под капотом у fork()
*
Почему когда ешь суп вилкой он утекает?
Утечка дескрипторов после fork() и как этого избежать
*
Почему у вилки три зуба?
Важность обработки всех вариантов возврата fork()
*
Как кушать демонов вилкой?
Запуск демонизирующихся процессов при помощи fork()
*
Как наложить вилкой в другую тарелку?
Переназначение дескрипторов вывода для нового процесса
*
Как сигналить вилке?
Взаимоотношения обработки сигналов и fork()
*
Как пользоваться вилкой когда сломалась ручка?
Самоликвидация дочернего процесса после завершения материнского
*
Как подготовиться к использованию вилки?
Сценарии использования pthread_atfork()
*
Как поцарапать окно вилкой?
Запуск дочернего процесса под Windows-системой
*
Как систематически пользоваться вилкой?
Почему вам не стоит пользоваться system()
*
Заключение
Благодарности и выводы

Читать далее
Всего голосов 74: ↑74 и ↓0 +74
Просмотры 12K
Комментарии 24

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

Работа

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