Category Archives: C/C++

Программирование на языках C и C++

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

09/17/2017
 

 Адресное пространство процесса на примере программы на C. Используемые утилиты и файлы: size /proc/$PID/maps objdump pmap Все примеры выполняются на ОС: С ядром: С использованием gcc:

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

08/28/2017
 

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

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

08/23/2017
 

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

C: структуры

08/21/2017
 

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

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

08/08/2017
 

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

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

07/31/2017
 

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

C: libssh – пример SSH-“клиента”

05/26/2017
 

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

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

05/16/2017
 

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

C: указатели – подробный разбор

05/22/2016
 

 Перевод с небольшими дополнениями, уточнениями и примерами. Оригинал в посте C Pointers Explained, Really. >>><<< Когда я учился в колледже – мой друг пожаловался, что ему сложно понять синтаксис и использование указателей при программировании на С. Для примера он привёл код вида “*x=**p++“, говоря что он уродливый и сложный для чтения, в нём слишком много операторов, наложенных друг… Read More »

Linux: strace – отслеживаем выполнение процесса

02/17/2016
 

 strace – утилита для Linux, которая позволяет отследить выполнение системных вызовов (system call) и сигналов к ядру системы. Для примера возьмем простую программу на С, которая выводит содержимое указанного файла: #include <stdio.h> #include <stdlib.h> int main() { char ch, file_name[25]; FILE *fp; printf(“Enter the name of file you wish to see\n”); gets(file_name); fp = fopen(file_name,”r”);… Read More »