Category Archives: C/C++

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

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 »

C: Declare vs Define в C и C++

02/08/2016
 

 Объявление (declaration) и определение (definition) в C и C++ имеют небольшое, но очень важное различие. Если не понимать его – то вас ожидают странные ошибки линкера (LD в GCC – /usr/bin/ld), вроде “undefined symbol foo“, “undefined reference to ‘foo’” или даже “undefined reference to vtable for foo” (в C++). Что такое Объявление в C и C++ Когда вы объявляете переменную, функцию… Read More »

C: enum – перечисление

04/13/2015
 

 Перечисление – тип данных, задаваемый пользователем, состоящий из целочисленных констант и связанных с ними имён. Для определения перечисления используется ключевое слово enum. Синтаксис определения enum: enum type_name{value1, value2, …, valueN }; Например: enum count {one, two, three, four, five }; Тут count – имя переменной типа enum, а one, two и т.д. – имена значений.

C: переменные argc и argv

01/23/2015
 

 Для работы с аргументами – в C используются две специальные переменные – argc и argv. argc – argument count, или “счётчик аргументов”; argv – argument vector, или “вектор аргументов”. Использовать их очень просто.

C: чтение, добавление, изменение и удаление переменных окружения (getvar, setvar, unsetenv)

01/22/2015
 

 Для работы с переменными используются функции getvar() и setvar() из библиотеки stdlib.h. Как понятно из названий – функция getvar() используется для получения значения переменной, а setvar() – для добавления или изменения.