Архив рубрики: C/C++

C is a general-purpose, imperative computer programming language, supporting structured programming, lexical variable scope and recursion, while a static type system prevents many unintended operations.

Redis: fork – Cannot allocate memory, Linux, виртуальная память и vm.overcommit_memory

27 августа 2019
 

 Cейчас настраиваю Redis как кеширующий сервис приложения, и среди прочего встал вопрос – надо ли включать vm.overcommit_memory в 1, или нет? Вопрос достаточно старый, см. История, но вот докопаться до сути, упорядочить и привести в читабельный вид удалось только сейчас. Проблема заключается в том, что официальная документация и практически все гайды/HowTo-шки по Redis достаточно легкомысленно… Читать далее »

What is: chroot – системный вызов и утилита в Linux

23 марта 2019
 

 chroot() был добавлен в Version 7 Unix в 1979 году и используется для изоляции файловой системы. По сути, является предшественником вообще всей идеи нынешней контейнеризации, только в современных системах используются namespaces и cgroups, а раньше применяли chroot для создания изолированного от хоста рабочего окружения, которое могло использоваться для тестирования. Собственно, ch и root и является… Читать далее »

C: отладка с gdb – примеры

30 января 2019
 

 gdb (GNU Project Debugger) используется при отладке/дебаге кода. Ниже приводятся примеры работы с кодом на С. Используем такой код: #include <stdio.h> #include <string.h> #include <stdlib.h> char * buf; int sum_to_n(int num) { int i,sum=0; for(i=1;i<=num;i++) sum+=i; return sum; } void printSum() { char line[10]; printf(“Enter a number: “); fgets(line, 10, stdin); if(line != NULL) strtok(line, “\n”);… Читать далее »

C: libmysqlclient – примеры работы с MySQL API

29 января 2019
 

 Давно не писал на С (последний раз – почти год тому, см. What is: Linux namespaces, примеры PID и Network namespaces). Немного за ним заскучал, ибо язык интересный и заставляет местами поломать голову, потому решил немного освежить память. Ниже приводятся примеры работы с сервером MySQL/MariaDB на С, используя API из библиотеки libmysqlclient. Примеры взяты из поста MySQL… Читать далее »

What is: Linux namespaces, примеры PID и Network namespaces

10 марта 2018
 

 Данный пост обединяет в себе два других замечательных (на мой взгляд) поста на тему Namespaces в Linux – A Tutorial for Isolating Your System with Linux Namespaces и Introduction to Linux namespaces – Part 1: UTS, с небольшими дополнениями и изменениями. Тем не менее – крайне рекомендую к прочтению оба поста выше, и ознакомиться с другими ссылками из… Читать далее »

Linux: C – адресное пространство процесса

17 сентября 2017
 

 Адресное пространство процесса на примере программы на C. Используемые утилиты и файлы: size /proc/$PID/maps objdump pmap Все примеры выполняются на ОС: [simterm] $ cat /etc/os-release | grep NAME NAME=”Arch Linux” PRETTY_NAME=”Arch Linux” [/simterm] С ядром: [simterm] $ uname -mrs Linux 4.12.8-2-ARCH x86_64 [/simterm] С использованием gcc: [simterm] $ gcc –version gcc (GCC) 7.2.0 [/simterm]

C: связанные списки

28 августа 2017
 

 Связанные списки являются второй по частоте использования структурой данных после массивов. Они являются достаточно простой реализацией динамических структур данных, использующие указатели (pointers) для реализации. Понимание работы указателей является необходимым условием для того, что бы понять связанные списки. Кроме того – требуется понимание динамического выделения памяти и знать, что такое структуры и как ими пользоваться. Ниже… Читать далее »

Arch Linux: уведомления в Openbox с libnotify

23 августа 2017
 

 Надо добавить всплывающее окошко, которое бы по крону выводило какой-то текст на экран. Используем libnofity, выполняем на Arch Linux (хотя принципиальной разницы нет – хоть на Убунте). Документация самого libnotify – тут>>>.

C: структуры

21 августа 2017
 

 Структура (structure) в C – коллекция переменных различного типа, доступ к которым возможен по одному и тому же имени. Например, вы хотите сохранить информацию о человеке – его имя, гражданство и зарплату. Вы можете создать переменные name, citizenship, salary и хранить информацию в них. Но что, если вам потребуется хранить информацию о нескольких людях? Можно… Читать далее »

C: “мониторинг” NGINX с помощью AF_INET

8 августа 2017
 

 В продакшене мы будем использовать что-то вроде Monit, а для Dev – решил написать маленькую утилиту, которая проверяет доступность NGINX и отправляет письмо при проблемах. Программа содержит две рабочие функции – socket_get(), которая с помощью connect()  пытается подключиться к порту NGINX (AF_INET сокету), и send_alarm(), которая с помощью system() выполняет mailx для отправки сообщений. Отправку… Читать далее »