Архив метки: C++

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 Все примеры выполняются на ОС: С ядром: С использованием gcc:

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

28 августа 2017
 

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

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 для отправки сообщений. Отправку… Читать далее »

C: создание и применение shared library в Linux

31 июля 2017
 

 Библиотека — это файл, содержащий скопилированный код из нескольких объектных файлов в один файл библиотеки, который может содержать функции используемые другими программами. Библиотеки могут быть статичными (static) и динамическими или разделяемыми (dynamic, shared). Ниже — краткий пример создания и применения shared library на C в Linux. Доступ к общей библиотеке может осуществляться по нескольким именам:… Читать далее »

C: libssh — пример SSH-«клиента»

26 мая 2017
 

 Ниже рассматривается пример написания SSH-клиента на C с использованием libssh. Сама библиотека libssh уже устарела, и вместо неё рекомендуется libssh2. Сравнение libssh и libssh2 есть тут>>>. Тем не менее у libssh отличные примеры (которые и используются в примерах ниже с небольшими отличаями) и документация, поэтому использую её. RFC 4251 в SSH Protocol Architecture описывает три основных… Читать далее »

C: сокеты и пример модели client-server

16 мая 2017
 

 Перевод с дополнениями. Оригинал — тут>>>. Как правило — два процесса общаются друг с другом с помощью одного из Inter Process Communication (IPC) механизма ядра, таких как: pipe очереди сообщений (Message queues) общая память (shared memory) Кроме перечисленных IPC — в ядре присутствует много других возможностей, но что если процессам необходимо обмениваться данными по сети?… Читать далее »