Программирование на Си (C) в Ubuntu (Linux). Введение. Программирование в Linux

Программирование на Си (C) в Ubuntu (Linux). Введение. Программирование в Linux

28.06.2019

Эта статья расчитана на два вида читателей. Во-первых, это люди, имеющие опыт программирования под MS Windows, но не имеющие такого опыта под GNU/Linux. Во-вторых, это люди, не имеющие опыта программирования вовсе. Однако, я предполагаю, что читатель в общем знаком с общепринятой в программировании терминологией, и ему не нужно объяснять, например, что такое «программа», «функция», «компилятор» или «отладка».

Средства разработки

Я буду рассматривать разработку с использованием тех средств, которые являются наиболее «родными» для GNU/Linux. К ним относятся:

    Язык программирования C

    Командная оболочка bash

    Текстовые редакторы Vim и Emacs

    Компилятор GCC

    Отладчик GDB

    Утилита для сборки проекта GNU make

    Система управления версиями Git

    Оконная система X11

Выбор именно этих средств не является догмой. Каждое из выше перечисленных средств может быть при желании заменено на другое. Однако, обычно под фразами наподобие «среда разработки Linux» понимается именно этот набор инструментов.

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

Наиболее «родным» языком программирования для GNU/Linux является C. Это обусловлено следующими факторами:

    GNU/Linux заимствует многие идеи (практически, идеологию) операционной системы UNIX;

    Операционная система UNIX была написана на языке C (собственно, этот язык создавался именно для написания этой ОС);

    Соответственно, ядро Linux и системное окружение GNU написаны тоже на C.

Ниже я буду рассматривать разработку с использованием языка C. Однако, этот выбор не является догмой. Другими популярными при разработке под GNU/Linux языками являются C++, Python, Perl. Конечно, могут использоваться и любые другие языки.

Среда разработки

В течение последних двух десятилетий очень широкое распространение получили т.н. IDE — интегрированные среды разработки. Такая среда включает в себя текстовый редактор, компилятор, отладчик, средства сборки проекта и мн.др. Такие среды есть и под GNU/Linux (наиболее популярны Eclipse, NetBeans, IDEA, KDevelop, Anjuta). Однако, история разработки под UNIX-подобные системы показывает, что IDE не являются не только единственным, но и наиболее эффективным средством разработки. Практически, правильный ответ на вопрос «какая самая лучшая IDE под GNU/Linux» — это «GNU/Linux это и есть IDE».

Часто можно встретить мнение, что большой проект без IDE разрабатывать невозможно. Это мнение легко опровергается. Первые версии UNIX писались даже не в Vim (его тогда ещё не было), а в Ed. Это так называемый «построчный» текстовый редактор, в котором вы можете редактировать за раз только одну строку текста. Весь файл на экране не отображается. В случае с UNIX по-другому и быть не могло — у разработчиков не было никаких экранов, а общение с системой осуществлялось при помощи телетайпов. Современное ядро Linux пишется в основном в редакторах Emacs и Vim.

Многие утилиты UNIX вызывают «текстовый редактор по умолчанию». Команда, запускающая текстовый редактор по умолчанию, берётся из переменной окружения $EDITOR . Некоторые утилиты смотрят сначала в переменную $VISUAL , и, лишь если она не установлена, в переменную $EDITOR . Это исторически сложившееся поведение: к старым компьютерам зачастую не было подключено никакого дисплея, а только телетайп, поэтому запускать экранный (визуальный) редактор смысла не было. В современных дистрибутивах обычно по умолчанию оказывается EDITOR=vi или EDITOR=nano . Указать использование другого редактора для одной команды можно так:

EDITOR=emacs some-command

Чтобы использовать нужный редактор по умолчанию всегда, нужно добавить в файл ~/.profile строчку типа

export EDITOR=emacs

Исторически сложилось так, что «настоящими» текстовыми редакторами для программистов являются только Vim и Emacs (просто из-за того, что у них самая долгая история развития именно в качестве текстовых редакторов для программистов). Остальные редакторы находятся в положении догоняющих.

Командная оболочка

Командная оболочка (или командный интерпретатор) — это программа, принимающая команды от пользователя на некотором достаточно простом языке программирования и выполняющая их. Большинство команд запускают одноимённые программы. Отдельные команды представляют собой конструкции языка программирования оболочки.

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

ОС семейств DOS и Windows заимствовали некоторые функции командной оболочки из UNIX, однако их авторы пошли на существенные упрощения, из-за чего функционал COMMAND.COM и cmd.exe получился сильно урезанным. PowerShell вполне на уровне, но работает существенно по-другому.

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

Документация

Все средства разработки и библиотеки в GNU/Linux обычно довольно хорошо документированы. Традиционно для документации используется специальный формат и утилита для его просмотра — man . Документация в системе делится на несколько разделов:

    Команды пользователя (например, ls, gcc или man)

    Системные вызовы — API ядра ОС

    Библиотечные функции

    Драйвера и т.п

    Форматы файлов

    Игры и т.п

    Различные обзоры подсистем

    Команды, используемые для системного администрирования

Для вызова раздела документации по имени нужно указать это имя при вызове команды man (например, man ls). Иногда разделы с одинаковым названием есть сразу в нескольких разделах документации документации. Указать конкретный раздел можно при вызове man (например, man 3 printf).

Более подробную информацию о справочной системе man см. в man man .

Утилиты системного окружения GNU часто используют для документации формат info. См., например, info Coreutils .

Компилятор

Сейчас существует много компиляторов языка C, более-менее совместимых с различными стандартами. Тем не менее, пока что в среде GNU/Linux наиболее применимым остаётся компилятор C, входящий в комплект GNU Compilers Collection (GCC). Этот компилятор, кроме стандарта C, поддерживает некоторое количество расширений стандарта. Эти расширения, в частности, широко используются в исходных текстах ядра Linux. В последнее время появляются компиляторы, способные скомпилировать ядро Linux (например, llvm-clang, или EKO).

Компилятор GCC запускается из командной оболочки командой вида

gcc program.c

где program.c — имя входного файла. Кроме того, по стандарту POSIX, компилятор может быть запущен командой cc program.c (cc — от "C compiler").

При обычном запуске компилятор пытается создать исполняемый файл. По умолчанию, выходной файл называется a.out (такое название осталось от древних версий UNIX). Другое название можно задать с помощью опции компилятора -o , например,

gcc -o program program.c

При сборке программы из нескольких модулей компилятору можно подавать на вход несколько исходных файлов или файлов объектного кода, например,

gcc -o program main.c module1.o module2.o …

Чтобы только скомпилировать один исходный файл в объектный код (не пытаясь собрать исполняемый файл), нужно дать команду вида

(имя выходного файла по умолчанию будет module.o).

Для сборки программы часто бывают нужны библиотеки. В Linux используются два типа библиотек: библиотеки для статической и динамической компоновки. При статической компоновке библиотека при сборке программы целиком включается в состав исполняемого файла. При динамической компоновке в исполняемый файл вписывается только название динамической библиотеки, а поиск этого файла и компоновка происходят при запуске программы.

Статическая библиотека в UNIX-подобных системах представляет собой архив (старинного формата ar), включающий набор объектных файлов. Такой архив создаётся командой вида

ar r libsomething.a module1.o module2.o …

Имена файлов библиотек традиционно начинаются с префикса lib .

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

gcc -shared -o libsomething.so module1.c module2.c …

Для использования библиотеки при сборке программы её нужно указать компилятору при помощи опции -l , например

gcc -o program -lm program.c

(здесь будет использоваться файл библиотеки libm.so , префикс lib компилятор подставляет по умолчанию). По умолчанию компилятор собирает программу, использующую динамические библиотеки. Если нужно использовать статические версии библиотек, компилятору нужно указать опцию -static .

Подробную информацию об опциях gcc см. в man gcc .

Hello, world!

Считается, что традиция начинать изучение языка программирования с написания программы, выводящей строку "Hello, world!", пошла с книги Кернигана и Ричи "Язык C" . В случае с языком C эта программа выглядит следующим образом:

#include

int main (int argc, char * argv) {
printf ("Hello world! \n " );
return 0 ;
}

Чтобы запустить эту программу, этот текст нужно записать в файл с именем, скажем, hello.c , и из директории, в которой расположен этот файл, дать команду вида

gcc -o hello hello.c

Впрочем, в случае такой простой программы достаточно дать команду

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

Порядок сборки

Остановимся несколько подробнее на том, что именно делает компилятор. Порядок действий компилятора C традиционен, и применяется компиляторами некоторых других языков.

На входе компилятор имеет в общем случае набор файлов с исходными текстами. Перед началом собственно компиляции эти файлы обрабатываются т.н. препроцессором (программа cpp). Главная функция этой программы — выполнение директив вида #include . Встретив такую директиву, препроцессор вставляет содержимое указанного файла (в данном случае, stdio.h) на место этой директивы. Препроцессор понимает ещё некоторые директивы, но сейчас на них останавливаться я не буду.

После препроцессора выполняется собственно компиляция. Из исходных файлов на этом этапе получаются т.н. объектные файлы. Это файлы, содержащие исполняемый машинный код, но ещё не готовые для запуска. Главное, чего в них недостаёт — это адреса вызываемых библиотечных функций. Например, код функции printf() содержится в библиотеке libc . А в объектном файле содержится только имя этой функции. Кроме того, объектный файл содержит имена всех объявленных в нём функций.

Объектные файлы, а также используемые библиотеки подаются на вход компоновщику (программа ld). Компоновщик ищет все вызываемые из различных объектных файлов функции (по именам) в объектных файлах и в библиотеках. Если все функции найдены, то компоновщик собирает собственно исполняемый файл. При этом имена вызываемых функций заменяются на конкретные адреса памяти. В случае использования динамической библиотеки имя используемой функции остаётся, и к нему добавляется имя файла динамической библиотеки, в которой при запуске программы нужно будет искать эту функцию.

Собственно программа gcc представляет собой так называемый драйвер (driver). Она запускает упомянутые выше программы (или только некоторые из них, в зависимости от опций), чтобы получить исполняемый файл.

Второй пример: решение квадратных уравнений

В качестве несколько более сложного примера рассмотрим программу, которая должна решать квадратные уравнения. Пользователь вводит коэффициенты квадратного трёхчлена, а программа выдаёт его действительные корни. Вот полный текст такой программы:

#include
#include

/* solve: calculate roots of square equation.
* a, b, c are coefficients in equation.
* Roots would be stored at x1, x2.
* Return value: count of real roots.
*/
int solve(double a, double b, double c,
double* x1, double* x2) {
double D = b*b - 4*a*c;
double sqrtD;

if (D > 0) {
sqrtD = sqrt(D);
*x1 = (-b - sqrtD)/(2.0 * a);
*x2 = (-b + sqrtD)/(2.0 * a);
return 2;
} else if (D < 0)
return 0;
else {
*x1 = -b/(2.0*a);
return 1;
}
}

int main (int argc, char* argv) {
double a,b,c;
double x1, x2;
int roots_count;

// Input coefficients
printf("A: ");
scanf("%lf", &a);
printf("B: ");
scanf("%lf", &b);
printf("C: ");
scanf("%lf", &c);

// Solve the equation
roots_count = solve(a,b,c, &x1, &x2);

// Output results
switch (roots_count) {
case 0:
printf("No (real) roots.\n");
break;
case 1:
printf("One root: %0.4lf\n", x1);
break;
case 2:
printf("Two roots: %0.4lf and %0.4lf\n",
x1, x2);
break;
}

По аналогии с предыдущим примером, запишем этот текст в файл square.c и попытаемся скомпилировать его командой

gcc -o square square.c

Но на этот раз мы получим ошибку примерно такого вида:

/tmp/cc6RNFIi.o: In function `solve": square.c:(.text+0x6d): undefined reference to `sqrt" collect2: ld returned 1 exit status

В чём здесь дело? Ясно, что компилятору почему-то не понравился вызов функции sqrt() . Причём, он жалуется уже не на файл исходного кода, а на объектный файл (вот этот cc6RNFIi.o). Это означает, что исходный файл благополучно скомпилировался, а проблемы возникли на стадии компоновки (что можно видеть и по упоминанию в тексте ошибки программы ld — это стандартный в GNU/Linux компоновщик). Компоновщик не смог найти функцию sqrt() . В данном случае, это произошло из-за того, что эта функция содержится в библиотеке libm , а мы не просили компилятор использовать её. Чтобы избавиться от этой ошибки, нам нужно изменить команду компиляции на следующую:

gcc -o square -lm square.c

Такая команда должна отработать без ошибок и создать исполняемый файл square .

При сборке любой достаточно сложной программы нам придётся использовать несколько библиотек, и, возможно, понадобится указывать ещё какие-то опции компилятору. Команда может получиться довольно длинная. Что же, каждый раз набирать её вручную? Нет. Один из принципов философии UNIX гласит: «Всё, что может быть автоматизировано, должно быть автоматизировано». Здесь нам пригодится одна из древнейших UNIX-утилит — программа make . Чтобы воспользоваться ею, нужно написать файл с именем Makefile (в той же директории, что и наш исходный файл) со следующим содержимым:

square: square.c $(CC) -o $@ -lm $<

Теперь собрать исполняемый файл можно просто дав команду make . Как это работает?

Make

Утилита make предназначена для сборки программ (хотя может использоваться для автоматизации многих других похожих задач). Она читает файл с именем Makefile и видит в нём набор правил. Каждое правило определяет три вещи: цель (goal, т.е. то, что нужно собрать), список исходных файлов и набор команд, которые нужно выполнить, чтобы собрать цель из исходных файлов. В примере выше, square — это имя цели, square.c — единственный в данном случае исходный файл (если их несколько, они перечисляются через пробел), а вторая строчка — команда. В команде могут использоваться переменные. Некоторые из переменных имеют специальное значение. В частности, в любом правиле $@ обозначает имя цели, а $< — первый исходный файл. Переменная $(CC) указывает на компилятор C, используемый в системе по умолчанию (в большинстве случаев это gcc , но бывает и что-нибудь другое).

В имени цели и списке исходных файлов может использоваться подстановочный символ % . Например, такое правило:

%.o: %.c $(CC) -c $<

обозначает, что файлы с именем, заканчивающимся на.o , нужно собирать из соответствующих файлов с суффиксом.c .

Кроме того, make заранее знает некоторое количество правил по умолчанию. Среди них есть упомянутое в последнем примере, а также правило

%: %.c $(CC) -o $@ $<

Благодаря этому правилу, в примере с «Hello, world!» просто команда make hello запускала cc -o hello hello.c .

По набору правил make составляет граф зависимостей целей друг от друга и от исходных файлов, и выполняет только те команды, которые нужны для сборки цели, указанной в командной строке. Если не указано никаких целей, то собирается первая цель, описанная в Makefile .

Более подробную информацию об этой утилите см., например, в man make .

Управление версиями

Для управления версиями исходного кода может использоваться любая VCS. Однако, раз уж мы говорим о GNU/Linux, рассмотрим вкратце систему, используемую для разработки ядра Linux: git. По git существует довольно обширная документация, в т.ч. и на русском языке. См. например, мою статью или известную серию статей .

Для начала использования git нужно создать репозиторий — хранилище для версий файлов. Это делается командой

Теперь можно добавлять файлы в репозиторий. Но нам не нужно отслеживать версии некоторых файлов, а именно: объектных файлов и исполняемых файлов. Чтобы сразу исключить их из рассмотрения git, напишем файл.gitignore следующего содержания:

*.o square hello

Теперь команда

добавит в репозиторий все файлы в текущей директории, кроме упомянутых в файле.gitignore . После этого можно делать коммит командой

По этой команде откроется текстовый редактор по умолчанию. Тут нужно будет написать комментарий к коммиту. В данном случае достаточно строчки типа «Initial commit».

Отладка

Для отладки в Linux используется отладчик gdb . Но сначала, для того, чтобы программу было удобно отлаживать, её нужно скомпилировать с опцией -g . Сейчас нам достаточно изменить Makefile , приведя его к виду

square: square.c $(CC) -o $@ -lm -g $<

и пересобрать программу.

При обычной компиляции в исполняемый файл не попадают имена функций, переменных и т.п. Опция -g указывает компилятору, что эту информацию нужно записать в соответствующую секцию исполняемого файла. Кроме того, с этой опцией в исполняемый файл записывается информация о соответствии смещений и номеров строк в исходном файле.

Отладка запускается командой вида

gdb ./some-program -a -b

При запуске отладчика появляется приглашение командной строки вида:

GNU gdb (GDB) 7.2-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from /home/portnov/LUG/src/square...done. (gdb)

Работа с отладчиком, в общих чертах, напоминает работу с командной оболочкой. Вы вводите команды, отладчик их исполняет. Как и в командной оболочке, работает автодополнение команд по клавише Tab. Кроме того, для краткости можно сокращать команды до первых нескольких букв — лишь бы избежать неоднозначности.

К наиболее часто используемым командам относятся:

Напечатать очередной кусок исходника (печатается 10 строк). Можно указать конкретные номера строк после имени команды, например l 10,15 .

Запустить программу на выполнение под отладчиком. Программа будет выполняться до ближайшей точки останова, или до конца.

Установить точку останова. Номер строки, на которой нужно установить точку останова, указывается после имени команды.

Выполнить одну строку программы.

Вычислить и напечатать выражение. Выражение указывается после команды. Таким образом можно, например, однократно посмотреть значение какой-нибудь переменной.

Добавить выражение к списку постоянно отображаемых. Значения этих выражений будут показываться после исполнения каждой команды. Рядом с каждым выражением печатается его номер в списке. Удалить выражение из списка можно командой undisplay с номером выражения.

Выход из отладчика.

Более подробную информацию по GDB см. в man gdb .

Оконная система X11

Исторически в UNIX не было и не могло быть никакой графической среды, потому что не было графических дисплеев. Графическая среда для UNIX появилась примерно тогда, когда появились распространённые графические дисплеи: в 1984. Сначала она называлась W (от Window), затем её усовершенствовали и назвали следующей буквой алфавита — X, следующая версия называлась X2… Сейчас имеем X11.

X11 представляет собой, прежде всего, сетевой протокол поверх TCP/IP и UDP/IP. У протокола есть клиент и есть сервер. Клиент посылает последовательность запросов вида «нарисуй мне окошко», «нарисуй на нём кнопочку», а сервер их исполняет. Один из главных принципов X11 — «определять механизмы, а не политики». Протокол предоставляет возможность, скажем, рисовать окошки, а как именно они будут отображаться — не определяет.

Наиболее распространённым X-сервером сейчас является Xorg (http://x.org); всё ещё жив XFree86; под Windows актуален Xming; выпускаются аппаратные X-серверы — комплекты «монитор + клавиатура + мышка», в которых поддержка серверной функциональности X11 реализована аппаратно — такие комплекты используются в качестве графических терминалов.

Протокол X11, в отличие от, скажем, HTTP, является бинарным, а не текстовым — это сделано из соображений экономии пропускной способности сетевого соединения и простоты разбора запросов сервером. Но это усложняет создание клиентов этого протокола: собирать замысловатые бинарные X11-запросы заведомо сложнее, чем, например, текстовые HTTP-запросы. Поэтому для написания X-клиентов используются специальные библиотеки функций, формирующих и отправляющих серверу X-запросы. Наиболее распространена библиотека libX11. Более современным вариантом является libxcb.

Запросы X11 весьма низкоуровневые. Например, чтобы реализовать функциональность кнопки, нужно нарисовать в окне прямоугольник, написать в нём текст, ждать в цикле нажатия кнопки мыши, и при каждом нажатии проверять, где щёлкнули — внутри прямоугольника или вне него. Поэтому стали появляться так называемые тулкиты — библиотеки, являющиеся высокоуровневыми обёртками над libX11.

Исторически первым тулкитом был Athena3D. Потом были Motif и Tk. Сейчас наиболее распространены GTK+ и Qt (Qt, строго говоря, представляет собой не X11-тулкит, а многоцелевой кроссплатформенный набор библиотек, который может использоваться в качестве X11-тулкита).

Hello, world на GTK+

В качестве примера рассмотрим следующую программу. Она показывает окно с одной кнопкой. При нажатии на эту кнопку появляется сообщение «Hello, world».

#include

// This function displays message dialog.
// main_window parameter should be set to parent window of the dialog.
void message_box (GtkWindow* main_window, gchar *message) {
GtkWidget *dialog, *label, *content_area;

// Create a dialog
dialog = gtk_dialog_new_with_buttons ("Message",
main_window,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_NONE,
NULL);
// Create a label
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
label = gtk_label_new (message);

// On "response" signal (it"s called when user clicks a button in
// the dialog), destroy the dialog.
g_signal_connect_swapped (dialog,
"response",
G_CALLBACK (gtk_widget_destroy),
dialog);

// Add a label
gtk_container_add (GTK_CONTAINER (content_area), label);
// Show the dialog
gtk_widget_show_all (dialog);
}

// Callback for delete-event signal
static gboolean delete_event(GtkWidget *widget,
GdkEvent *event,
gpointer data)
{
// If return TRUE, window will not be closed.
// This may be used to preven closing window in some situations.
return FALSE;
}

// Callback for destroy signal
static void destroy(GtkWidget *widget,
gpointer data)
{
// End main GTK+ event loop
gtk_main_quit ();
}

// Callback for button click
static void hello (GtkWidget *widget,
gpointer data)
{
// "data" parameter represents main window here
message_box(GTK_WINDOW(data), "Hello, world!");
}

int main(int argc,
char *argv)
{
GtkWidget *window;
GtkWidget *button;

// Init GTK+
gtk_init (&argc, &argv);

// Create main window
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

// Set up callbacks for some signals
g_signal_connect (window, "delete-event",
G_CALLBACK (delete_event), NULL);

G_signal_connect (window, "destroy",
G_CALLBACK (destroy), NULL);

// Set window borders width
gtk_container_set_border_width (GTK_CONTAINER (window), 10);

// Create labeled button
button = gtk_button_new_with_label ("Hello World");

// Set up callback for "clicked" signal of the button.
// Pass main window as second parameter.
g_signal_connect (button, "clicked", G_CALLBACK (hello), (gpointer)window);

// Pack the button into window
gtk_container_add (GTK_CONTAINER (window), button);

// Show the button
gtk_widget_show (button);

// Show the window
gtk_widget_show (window);

// Run main GTK+ event loop.
gtk_main ();

Собирается эта программа командой вида

gcc -o gtk-hello $(pkg-config --cflags gtk+-2.0) $(pkg-config --libs gtk+-2.0) gtk-hello.c

Дополнительная литература

Реймонд, Эрик С. Искусство программирования для UNIX. — Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 544с., ил.

Керниган Б., Пайк Р. UNIX. Программное окружене. — Пер с англ. — СПб: Символ-Плюс, 2003. — 416с., ил.

Керниган Б., Ритчи Д. Язык программирования C. — Пер. с англ. — Москва: Вильямс, 2006. — 304 с.

Linux быстро развивается и становиться все популярнее, особенно в связи с тем, что сокращается использование Windows, а также множество программистов работают над продвижением Linux, создавая новые программы для настольных компьютеров, которые будут эквивалентны или даже лучше приложений в Windows и Mac OS X.

Большое количество дистрибутивов пытаются сделать Linux более легким для новых пользователей, которые раньше использовали Linux или Mac OS X. Это еще лучше способствует продвижению Linux в массы.

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

В этой статье мы рассмотрим самые популярные языки программирования для Linux. Рассмотрим те, на которых разработана эта операционная система и те, которые используются для создания приложений. На самом деле список не отсортирован по степени важности, все используемые здесь языки хороши. Все они кроссплатформенные, и вы можете написать на них программу для любой из доступных операционных систем.

Я не преувеличу, если скажу, что этот язык был создан для этой операционной системы. Это уже старый язык. Он создавался в семидесятых годах инженером из Bell Labs специально для написания ядра Unix. Дело в том, что в те времена программы и операционные системы писались на ассемблере и нужно было для каждой архитектуры писать программу отдельно, потому что наборы инструкций отличались. Разработчикам Unix нужен был высокоуровневый язык программирования, на котором они смогли бы написать Unix один раз и собирать его для всех платформ. Таким языком стал Си.

Ядро Linux, основано на Unix, а поэтому тоже написано на Си, также на Си реализованы все модули ядра, драйверы, а также огромное количество системного программного обеспечения. Если вы задавались вопросом, на чем написан Linux то теперь знаете ответ. На Си разработаны множество утилит из набора GNU, X сервер, набор библиотек для работы с графикой GTK и многое другое, некоторые оконные менеджеры. Но для написания новых программ Си используется все реже, ему на замену пришла его объективно ориентированная модификация С++.

2. С++

Это усовершенствованная версия Cи, появился он ненамного позже си. В 1980 году Бьёрн Страуструп работал над своим исследованием и ему не хватало стандартных возможностей Си, поэтому он придумал к нему пару улучшений. Неожиданно этот язык стал популярен среди его коллег и он уже не мог сам следить за его развитием.

Теперь это один из самых популярных языков программирования. Здесь доступно как объективно ориентированное, так и процедурные стили программирования. Правда, он все же очень сложен для новичков, как и Си. Здесь нужна очень высокая точность при управлении памятью.

На C++ написано много программного обеспечения в Linux, это те же самые утилиты GNU, много пользовательских программ, графические окружения, браузеры. На C++ написан графический фреймворк Qt, который сейчас используется для окружения рабочего стола KDE и большого количества кроссплатформенных программ. Qt - одновременно коммерческий и некоммерческий проект. Если вы разрабатываете свободное ПО, то можете использовать Qt бесплатно, нет - нужно платить за лицензию. Qt намного проще для начинающих чем чистый Си или С++.

Си и С++ наиболее популярные языки программирования для linux

3. Java

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

Изначально Java был разработан в девяностых годах компанией Sun Microsystems для встраиваемых устройств с низкой вычислительной мощностью. Для мобильных телефонов, микроконтроллеров и другого оборудования. Его цель была поднять кроссплатформенность на новый уровень. Программа пишется на java, преобразуется в байт код, которой Java машина может выполнять вообще на любом оборудовании независимо от архитектуры и возможностей. Затем Java начал использоваться для создания веб-апплетов в браузерах, а потому же начали создаваться настольные приложения.

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

На Java пишется не так много программ, но среди них есть и известные, это такие среды разработки, как Netbeans, Eclipse, InteljIDE. Некоторые производители оборудования выпускают утилиты для управления своим оборудованием на Java, чтобы они могли одинаково хорошо работать в Linux. На Java написано много простых игр, а также она вовсю используется в операционной системе Android.

3. Python

Python - это интерпретируемый язык высокого уровня общего назначения. Он разработан человеком по имени Гвидо Ван Россум в начале восьмидесятых годов, он работал над языком в свободное время, и ставил цель создать язык для обучения программированию.

Основная идея Python - простота, максимальная скорость разработки, минимум ошибок, минимум неопределенности. Сам синтаксис языка способствует тому чтобы вы писали правильно и не допускали ошибок. Это мгновенно сделало Python одним из самых популярных языков. Было разработано множество библиотек для работы с системными компонентами, реализаций алгоритмов и наборов API для работы с сетевыми сервисами. Сейчас на Python можно написать как веб-сайт, так и полноценное Qt приложение, доказательство первому - множество сайтов, в том числе Яндекс, а второму популярный видеоредактор OpenShot.

К тому же на Python написано бесчисленное количество системных скриптов и утилит для управления Linux. Это утилита apt для установки программного обеспечения в Ubuntu, пакетный менеджер Emerge в Gentoo и еще огромное количество небольших скриптов. Причина тому простота языка. Программист тратит на программу несколько часов, а она отлично работает несколько лет.

4. JavaScript / GitHub Electron

JavaScript - это в первую очередь язык программирования для создания динамических веб-страниц, разработанный специально для этой цели в середине девяностых Бренданом Эйхом в компании Netscape. До недавнего времени JavaScript так и использовался для генерации динамических веб-страниц на стороне клиента и в веб-приложениях. Но затем появился проект Node.js, позволяющий разрабатывать серверные программы на JavaScript. Совсем недавно компания GitHub создала фреймворк Electron, на базе Node.js, с помощью которого теперь JavaScript может использоваться для создания десктопных приложений.

Electron позволяет использовать технологии HTML, CSS, JavaScript для создания прекрасных программ для рабочего стола. Эта платформа активно поддерживается командой GitHub и сообществом.

Хотя платформа вышла совсем недавно, на ней уже написано до сотни приложений, среди самых известных можно отметить редакторы сходного кода Atom и LightTable, а также приложение для управления сайтом WordPress, и новое приложение для чата RocketCaht. Кроме того, JavaScript используется для разработки программ рабочего стола на платформе Chromium, таких программ намного больше, тот же редактор Brackets, такие полезные утилиты, как Google Keep, Pocket, Wunderlist и другие программы из магазина Chrome.

5. Shell

Команды терминала Linux позволяют не только выполнять повседневные операции в интерактивном режиме, но это также полноценный язык программирования с поддержкой самых простых управляющих конструкций. Наиболее распространенная оболочка Bash (Bourne Again Shell) Больше всего скриптов написаны именно на ее синтаксисе, но есть и другие, например, тот же fish, sh, zsh, dash и т д.

Синтаксис управляющих конструкций Bash немного сложный для понимания, но на нем написано много системных скриптов, это в первую очередь все скрипты инициализации демонов в SysVinit, скрипты для обслуживания серверов, резервного копирования, запуска программ и т д. У каждого администратора есть несколько скриптов, написанных на Bash.

Выводы

Это далеко не все языки программирования linux, которые используются для создания программ в Linux, очень часто для создания скриптов в последнее время начал использоваться Ruby, уже выходит из моды Perl также применяются такие более специфические языки программирования как Go, R, Vala и другие. Для своих нужд я использую Python и php, а вы пишите программы для Linux? На каких языках программирования? Напишите в комментариях!

  • Джонатан Бартлетт, "Программирование высокопроизводительных приложений на процессоре Cell BE: Часть 4. Программирование SPU с расчетом на производительность" В этой части рассматриваются такие вопросы, как векторное SIMD-программирование, устранение ветвлений (branch elimination), раскрутка циклов (loop unrolling), планирование выполнения инструкций (instruction scheduling) и приемы прогнозирования ветвлений (branch hinting).

  • "8 лучших бесплатных средств разработки с открытым кодом по версии InfoWorld"

  • "Тестирование от А до Я. Часть 1 - Основополагающие принципы и подходы"

  • Пер Кролл, "OpenUP - это просто" В данной статье рассказывается об OpenUP, недавно разработанной инфраструктуре разработки программного обеспечения, которая строится на методах гибкой разработки с использованием унифицированного процесса Rational (Rational Unified Process).

  • "Результаты исследования популярности языков программирования"

  • Грайвер Александр и GIS-Lab, "Использование Doxygen для работы с исходным программным кодом ПО ГИС" Одна из методик работы с большими объёмами чужого кода, ориентации в нём и использовании его составных частей в своих программах.

  • Шевелёв Денис, "Пишем "ДЕМОНА" своими руками" Нашей целью является написание сетевого демона для управления чем-либо на Linux из под Windows с различных мест.

  • Martin Husemann, перевод - Сергей Каличев, "Fighting the Lemmings" Описание типичных проблем, возникающих при написании переносимого кода, некоторые из проблемы очевидны, но ошибки, с ними связанные, продолжают регулярно появляться в реальном коде.

  • Кэмерон Лэйрд, "Методы отладки использования памяти" Ошибки памяти существенно снижают эффективность работы приложений, и не так уж и много команд разработчиков имеют четкий план устранения этих ошибок. Но есть и хорошие новости: в ошибках памяти можно достаточно просто разобраться.

  • Avi Rozen, перевод А.Тарасова, "Удаленная отладка с помощью GDB и GDBserver" Рассмотрен способ отладки приложений на удаленной системе, платформа которой может отличаться от платформы разработчика.

  • Е.Иванов, Рецензия на "Книгу Дракона" ("Dragon Book") - "Компиляторы: принципы, технологии и инструменты" - перевод книги (Compilers: Principles, Techniques and Tools. 2nd Edition. Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, 2007)

  • Н.Н.Иванов, "Программирование в Linux с нуля" Cвободно распространяемый учебник по программированию в Linux.

  • Н.Иванов выложил очередной раздел своей книги "Программирование в Linux с нуля: "6.4. Замена образа процесса"

  • Андрей Боровский, "Программирование для Unix/Linux"

  • А.Боровский, "Программирование для Unix/Linux" Серия статей по программированию Unix/Linux, напечатаннная в журнале Linux Format

  • Андрей Боровский, "Демоны" Статья из серии "Программирование для Linux" , публикуемой в журнале Linux Format.

  • Valerie Henson, перевод: В.Черкасов, "Введение в написание модулей ядра Linux."

  • Nickolay Tarasenko, "Реализация системных вызовов работы с сокетами в ядре Linux. Создание сокета."

  • К.Касперски, "Хардкорная отладка с Linice: учимся работать в консольном отладчике ядра" Linice - это неофициальный порт легендарного SoftICE под Linux, сохранивший интерфейс, систему команд и большинство возможностей последнего.


  • Д.В.Силаков, "Текущее состояние и перспективы развития инфраструктуры LSB" В статье рассказывается о технической стороне разработки стандарта Linux Standard Base и связанной с ним инфраструктуре.

  • Federico Kereki, перевод - А.Дмитриев,

  • Родриго Серон, "Набор средств для линейного программирования GNU: Часть 1: Введение в линейную оптимизацию" Данная статья посвящена описанию GLPK (набор средств для линейного программирования GNU), клиентской служебной программы glpsol, и языку GNU MathProg, предназначенным для решения задач оптимизации операций.

  • Родриго Серон, "Набор средств для линейного программирования GNU: Часть 2: Проблемы средней сложности в линейном программировании"

  • Родриго Серон, "Набор средств для линейного программирования GNU: Часть 3. Сложные проблемы и элегантные решения"

  • В.Царьков прислал ссылку, по которой можно скачать книгу "Programming from the Ground Up" . Как пишет Владимир: "Вот ссылка на отличную книжку по ассемблеру для среды GNU/Linux и компьютерным наукам вообще." Но книга на английском и в PDF-формате.


  • Кеннет Баллард, "Безопасное программирование с OpenSSL API, Часть 3: Обеспечение надежного обслуживания" С OpenSSL вы можете создавать защищенные серверные приложения и, несмотря на то, что документация выглядит пугающей, это не так трудно.

  • "Результаты тестирования шести ведущих фреймворков на производительность"

  • Александр Мироч, "Выполнение разделяемых библиотек в Linux"

  • Девин Ватсон, "Linux Daemon HOWTO" (Перевод). Как написать демон в Linux.

  • Д.Пантелеичев, "Разработка программного обеспечения для Linux. Инструментарий" .

  • Дмитрий Пантелеичев, "OpenGL. Программирование графики в Linux" Объемный учебный курс, посвященный программированию двух- и трехмерной графики с использованием OpenGL. В качестве оконного инструментария применяется Qt, что вкупе с переносимой природой OpenGL, позволяет писать по-настоящему кросс-платформенные приложения.

  • Ноэл Рэппин, "Создание кросс-платформенных GUI-приложений с использованием wxWidgets" Набор инструментальных средств wxWidgets содержит мощные кросс-платформенные средства разработки графического пользовательского интерфейса (GUI). Не только "родной" C++, но и другие языки программирования предлагают средства для использования данного инструментального набора. Узнайте, как использовать wxWidgets для создания элегантных и очень полезных GUI-приложений на предпочитаемом вами языке программирования.



  • К. Пфистер, русский перевод: Ермаков И.Е., "Компонентное ПО" ,

  • Nikolay N. Ivanov, "Программирование в Linux с нуля" Проект по созданию книги на указанную в заглавии тему. Автор книги готов учесть все ваши замечания и предложения. Пишите!




  • Севрюгин А. И., "PCRE.RU" Универсальная энциклопедия регулярных выражений стандарта PCRE, совместимых с языками Perl, PHP, Javascript.

  • "Lindevel.ru/" - сайт, посвященный вопросам программирования под Линукс. Самое интересное там - архив рассылки "Программирование в Linux с нуля" в разделе "Статьи".

  • Мэт Фрей (Matt Frye), перевод: Иван Песин, "Отладка кода с помощью strace" Перевод статьи про использование утилиты strace как инструмента для отладки кода.

  • Mark Wilkinson, перевод: Иван Песин "Автоматизация процессов сборки и тестирования" Эта статья знакомит вас с CruiseControl, программным обеспечением с открытым исходным кодом, которое вы можете использовать для автоматизации процессов сборки и модульного тестирования в проектах, где задействовано несколько разработчиков.

  • Дмитрий Бушенко,

  • Вадим Станкевич, .


  • Крис Херборт, "Разработка программного обеспечения для UNIX с помощью Eclipse" Перенос унаследованного кода в современную среду IDE.

  • Крис Анищук, Дэвид Галлардо, "Начало работы с платформой Eclipse"

  • "Цикл статей о JasperReports" - генераторе отчетов, интегрируемом с Eclipse.

  • Натан А. Гуд, "Создание собственных мастеров Eclipse" Одним из важнейших достоинств технологии Eclipse как инфраструктурной платформы и интегрированной среды разработки является ее расширяемость. Из этой статьи вы узнаете, как быстро создать мастера, который автоматизирует процесс добавления нового файла.

  • Прашант Дева, "Eclipse облегчает работу с редактором Ant" Откройте для себя интеграционные возможности Ant в интегрированной среде обработки (IDE) Eclipse, и научитесь писать программы, компоновать их и исправлять ошибки кода в Eclipse с помощью редактора Ant.

  • Eclipse"s Rich Client Platform, Часть 2: Расширение базового workbench"а
    В этом учебном пособии продолжается обзор Eclipse Rich Client Platform. Здесь показано как использовать views, actions и wizards для создания полноценного приложения.

  • "Установка и использование Eclipse для Linux на компьютерах POWER" Eclipse -- это расширяемая интегрировання среда разработки с открытым кодом.

  • "Лучшие 10 трюков для новых пользователей Eclipse" Перевод статьи с 10 простыми подсказками по эффективному использованию среды разработки Eclipse.

  • "Ant за 10 шагов" (Перевод Ant in Ten Steps by Russ Olsen). Ant - это инструмент, который призван автоматизировать процесс сборки ПО.

  • Мэтт Тэллес, Юань Хсих, пер. с англ. С. Лунин, "Изучение знаменитых (и не очень знаменитых) ошибок" . Глава из книги "Наука отладки"


  • Дмитрий Бушенко, "Программирование в Linux. Часть четвертая. .NET в Linux"

  • Дмитрий Бушенко, "Программирование на.NET в Linux. Часть 4. Элементы Gtk# в примерах"

  • Дмитрий Бушенко, "Программирование на.NET в Linux" Часть 3. Оконное приложение на GTK#.

  • Дмитрий Бушенко, "Программирование на.NET в Linux." "Часть 2. Первое приложение на Mono C#"



  • Nikolay N. Ivanov, "ПРОГРАММИРОВАНИЕ В LINUX" .


  • Мацей Катафьяж, перевод Сергей Безденежных, "Основы GTK+, Часть 2: Как использовать GTK+"

  • "Использование библиотек" Библиотеки бывают статические и динамические.

  • Дэвид Мадэли, перевод - Безденежных Сергей, "Создание виджетов с использованием Cairo и GTK+ 2.8, часть 2"


  • Tony Gale, Ian Main & the GTK team, "Перевод GTK+ 2.0 Tutorial"

  • "Внутри менеджера памяти. Выбор, подходы и реализация методов динамического выделения памяти" рассматриваются методики управления памятью, доступные программистам под Linux.

  • Алексей Федорчук,

  • Андрей Драница, "Бейсик Линукс сыры пыры" Обзор инструментальных средств разработки под Linux.

  • А.М. Вендров, "Современные технологии создания программного обеспечения. Обзор"

  • Edsger W. Dijkstra, Перевод - Alf, 14 августа 2004, "Два взгляда на программирование"

  • Для начала прочитайте один раздел из , перевод Alex Ott, v1.3.2, 22 Февраля 1999

  • "Разработка модуля Linux ядра, реализующего алгоритм криптозащиты ГОСТ 28147-89"

  • "Запуск программы, собранной с другой версией glibc" Короткий полезный совет.

  • Jasmin Blanchette, Mark Summerfield, Перевод: Андрей Киселёв, "Разработка графического интерфейса с помощью библиотеки Qt3"

  • Стив Лит(Steve Litt), перевод: Александр Кубышкин, "Сравнительная Религия" Как выбрать для себя основной язык программирования. Обсуждаются преимущества и недостатки C, C++, Java, Perl, Python, Ruby.

  • Jeff Tranter, перевод: Андрей Киселев, "Системный вызов sendfile" Системный вызов sendfile был добавлен в ядро Linux относительно недавно и стал важным приобретением для приложений, таких как ftp или web серверы, которым просто необходим эффективный механизм передачи файлов.

  • " Программирование под UNIX" Жаль, что нет ни автора, ни года публикации.

  • Евгений Хилько, "Настройка сборки win-приложений кросскомпилятором mingw32 в KDevelop"

  • "Письменный прибор" Речь пойдет о версии 3.2.0 среды KDevelop в дистрибутиве SuSE 9.3.


  • Sandeep S, перевод: Андрей Киселев, "Трассировка процессов с помощью Ptrace " , часть 2. В статье рассказывается, в частности, о структуре исполняемого формата файлов - ELF.

  • Sandeep S., Перевод: Андрей Киселев, "Трассировка процессов с помощью Ptrace -- Часть 3" Цель данной части состоит в том, чтобы продемонстрировать методику доступа к идентификаторам процесса во время исполнения. Область применения этой методики настолько широка, что ограничивается лишь вашей фантазией.

  • В. Мешков, "Перехват системных вызовов в ОС Linux"

  • С.Гуленок, "Занимательное пингвиностроение. Фундамент" В разговорах о Linux мне часто попадалась фраза "Linux написан программистами для программистов". Так ли это?

  • Князев Алексей, "Русский вариант Linux Device Driver 2-nd edition" Это не перевод, а скорее нечто "по мотивам" перевода известного руководства Alessandro Rubini & Jonatan Corbet.

  • "Linux Device Driver 2-nd edition" Князев Алексей завершил перевод очередной, 8-ой главы Linux Device Driver 2-nd edition. Итого, переведены главы 0-8 и 13. Идет работа над переводом 9-й главы.

  • Кузин Андрей, Программирование под Linux
    Шаг 1 - Компиляция программ на языке C/C++ (30.01.2002 - 2 Kb)
    Шаг 2 - Отладочная информация (30.01.2002 - 4.2 Kb)
    Шаг 3 - Компиляция нескольких файлов (15.02.2002 - 3.7 Kb)
    Шаг 4 - Библиотеки объектных файлов (20.02.2002 - 3.0 Kb)
    Шаг 5 - Создание статической библиотеки (20.02.2002 - 3.7 Kb)
    Шаг 6 - Создание динамической библиотеки (20.02.2002 - 5.2 Kb)
    Шаг 7 - Использование динамических библиотек (23.02.2002 - 4.9 Kb)
    Шаг 8 - Функции работы с динамическими библиотеками (23.02.2002 - 5.0 Kb)
    Шаг 9 - Инициализация динамических библиотек (27.02.2002 - 3.5 Kb)
    Шаг 10 - Передача опций в программу - getopt (15.10.2002 - 6.6 Kb)
    Шаг 11 - Передача длинных опций в программу - getopt_long (19.12.2002 - 11.2 Kb)
    Шаг 12 - Вывод сообщений об ошибках программы (22.12.2002 - 7.5 Kb)
    Шаг 13 - Получение информации о пользователе (22.12.2002 - 10.2 Kb)
    Шаг 14 - Получение данных из shadow password (22.12.2002 - 5.5 Kb)
    Шаг 15 - Работа с паролями системы с помощью функции crypt() (24.12.2002 - 10.0 Kb)

  • Котельников Руслан.

  • Руслан Попов, "Введение в KDevelop"

  • И.Воронин, "Использование CCache" Ccache дает отличный прирост скорости при повторной пересборке программы. К примеру, я собирал ядро Linux на машине с процессором Pentium MMX / 200 Mhz всего за 10 минут.

  • Олег Беленков Перенос приложений с Windows на Linux [ОТКРЫТЫЕ СИСТЕМЫ, 2000/07-08]

  • С.Богомолов, libdb

  • С.Богомолов, Построение и использование разделяемых библиотек

  • С.Богомолов, TclTk (установка)

  • Система управления программным проектом SCCS , Т.А.Пивоваренок, Суперкомпьютерный Центр

  • Механизмы межпроцессных взаимодействий в операционной системе Unix , Сергей Кузнецов, учебные материалы конференции Индустрия Программирования 96 ,

  • ИТОЛОГИЯ - наука об информационных технологиях , В. Сухомлин, НИВЦ МГУ, учебные материалы конференции Индустрия Программирования 96 , Центр Информационных Технологий

  • "Индустрия Программирования "96" , Материалы конференции, Центр Информационных Технологий

  • Андрей Бондаренко Визуальные средства разработки (IDE)

  • Сергей Журавлев Обзор IDE под Linux

  • А.Чеботарев, "QT: интерфейс, и не только..."

  • А.М. Вендров, "Argussoft Co". CASE-технологии. Аннотация. Содержание CASE-технологии. Современные методы и средства проектирования информационных систем.

  • Wolfgang Mauerer, (перевод: Александр Михайлов) Визуальная отладка в DDD. Ничего и никогда не работает так, как надо; все программы полны ошибок; спецификации неверны, а рализация делает прямо противоположное ожидаемому. Нахождение ошибок не только неизбежная часть цикла разработки программного обеспечения, но и важная составляющая "жизненного пути" любой программы.

  • Guido Socher, перевод: Пухляков Кирилл, "Почему это не работает!? Способы обнаружения и исправления ошибок в Linux приложениях"

  • Дональд Э.Кнут, "Сортировка и поиск" Искусство программирования т.3

  • "Введение в Simple DirectMedia Layer" SDL - бесплатный кроссплатформенный мультимедийный программный интерфейс приложения. Используется для создания игр, библиотек для игр, демонстрационных программ, эмуляторов, MPEG плэйеров и других программ.

  • Графические инструменты для Linux программ
    Графические инструменты - это библиотеки подпрограмм, которые позволяют добавлять определенный набор функций, используя который язык программирования интегрирует графический интерфейс в Вашу программу.

  • Harvey Blume,

  • Денис Колисниченко, "Программное перенаправление ввода-вывода" [Опубликовано 25.09.2002.]

  • "Во власти скриптов" [ОТКРЫТЫЕ СИСТЕМЫ, 2002/09]

  • Константин Михайленко, "Параллельный стиль" 01 Марта 2002г., Статья посвящена параллельным вычислениям

  • Leonardo Giordani, "Параллельное программирование - взаимодействие между процессами."

  • Leonardo Giordani, перевод Пухляков Кирилл, "Параллельное программирование - очереди сообщений" часть 3.

  • По материалам Dinil Divakaran, подготовил X-Stranger, "Свой компилятор под Linux"

  • Владимир Попов, "А это я сделал так..." Не опытный guru отвечает на вопрос дилетанта-newbee, а любой everyone может поделиться своим опытом. В данном случае рассказано о компиляции.

  • S.Sandeep, перевод: Андрей Киселев, "Трассировка процессов с помощью Ptrace -- Часть 1." Системный вызов ptrace является основой основ для программ-отладчиков, таких как gdb, но все же принципы работы с этим системным вызовом недостаточно хорошо освещены в документации.

  • "ccache - кэш для компилятора" Программа ccache кэширует результаты компиляции, позволяя значительно ускорить повторные пересборки приложения.

  • В.Мешков, "Программирование CD/DVD-устройств в Linux" (файл в pdf-формате). В книге рассмотрены порядок управления приводом с использованием регистров контроллера, логическая структура оптических носителей информации, примеры использования встроенных в Linux ядро ATAPI и SCSI драйверов, алгоритмы записи различной информации на CD диски и программная реализация данных алгоритмов.

  • Davyd Madeley, перевод - Безденежных Сергей, "Создание виджетов с использованием Cairo и GTK+ 2.8" Начиная с версии 2.8, GTK+ отрисовывает все свои элементы интерфейса с помощью мощной библиотеки векторной графики Cairo. В этой статье рассказывается как можно самому создать виджет GTK+, используя библиотеки Cairo для его отрисовки.

  • Илья Евсеев, " MPI для начинающих" MPI (Message passing interface ="Взаимодействие через передачу сообщений") - это стандарт на программный инструментарий для обеспечения связи между ветвями параллельного приложения.

  • "Qt без KDevelop" Это руководство поможет вам разобраться в особенностях построения программ, использующих библиотеку QT. Чтобы использовать библиотеку QT, достаточно консоли, текстового редактора и графического окружения (например, KDE).

  • Появился сайт http://corba.kubsu.ru/ , посвященный технологии CORBA. Как отмечается на главной странице, побочным направлением данного проекта является тематика Linux, потому что достаточно большое количество разработчиков, использующих CORBA технологии, разрабатывают ПО именно под эту операционную систему. (Ссылка прислана Алексеем Курганом).

  • "SVGAlib"
  • GCC

  • Mulyadi Santosa, "Изучаем параметры GCC."

  • GCC - корень всего , автор Lorne Bailey
    GCC - отличный компилятор, но man-page не очень удобна. Заметка рассказывает о простоте использования компилятора.

  • Sergei Karasiov, "Как на самом деле работает gcc"



  • gcc part1 Компилятор языков C, C++, Objective C (часть 1) Руководство пользователя (gcc 2.7)

  • gcc part2 gcc: Компилятор языков C, C++, Objective C (часть 2) Перенос на новые архитектуры (gcc 2.7)

  • Автор: Jpiszcz, Перевод: Юрий Прушинский, "Оптимизация GCC"
  • Ассемблер

  • Дмитрий Грибенко, "Ассемблер в Linux для программистов C" Эта книга ориентирована на программистов, которые уже знают C на достаточном уровне. Единственное, в чём выражается ориентированность на Linux, - это используемый синтаксис ассемблера. Программисты на ассемблере в DOS и Windows используют синтаксис Intel, но в системах *nix принято использовать синтаксис AT&T.

  • Рэм Нараян, "Ассемблеры для Linux: Сравнение GAS и NASM" В этой статье объясняются некоторые наиболее важные синтаксические и семантические различия двух самых популярных ассемблеров для LinuxR - GNU Assembler (GAS) и Netwide Assembler (NASM), а также различия в базовом синтаксисе, переменных и доступе к памяти, обработке макросов, функциях и внешних подпрограммах, работе со стеком и методиках простого повторения блоков кода.

  • Rostyslav. "Ассемблер в среде UNIX или как устроен шеллкод"

  • Алексей Ю. Уласевич, "Часто задаваемые вопросы по использованию ассемблера в юниксах."

  • Подборка ссылок на документацию по ассемблеру .

  • К.Болдышев, от автора.

  • Konstantin Boldyshev and F.-R. Rideau. Assembly HOWTO . Ассеблер для DOS, Windows и Linux. (по-английски).

  • Aleksey Ulasevich, "Часто задаваемые вопросы по использованию ассемблера в юниксах"

  • Если вы вообще инересуетесь вопросами программирования для Линукс и ее устройством на самом низком уровне, загляните на сайт "http://www.lowlevel.ru/" . Там вы найдете много чего полезного, например, "Описание формата ELF" , "Файловая система EXT2" "Часть 1" , "Часть 2" .



  • Linux/i386 Assembly programming page Страница посвященная программированию на ассемблере для Linux.

  • Jan"s Linux & Assembler HomePage Ассемблер в DOS и Linux.

  • Александр Куприн, ...Пишем игрушечную ОС...Копнём поглубже...

  • "Пишем игрушечную ОС (часть I)"

  • Krishnakumar R., Перевод: Александр Куприн, "Пишем игрушечную ОС (часть II)"

  • Bob, "Реализация низкоуровневой поддержки шины PCI в ядре Linux"

  • О декомпиляции Даже самый лучший pеассемблеp не может точно восстановить код пpогpаммы. Компиляция - однонапpавленная функция. Полученный ассеблеpный, а далее и машинный код обладает спецификой, зависящей от многих фактоpов и интеллектуальный анализ не всегда пpигоден...

  • Intuit, "Основы программирования Netfilter на ассемблере." Статья о работе с Netfilter, подсистемой ядра, расширяющей возможности ОС в ра- боте с сетевыми фреймами. Язык программирования - ассемблер. Синтаксис GAS. В статье описано создание простейших модулей(LKM) для демонстрации возможностей данной подсистемы.
  • Язык Shell

  • Михаэль Штутц, "Регулярные выражения" Концепция регулярных выражений (regexps) - обозначений для описания шаблонов, соответствующих набору строк - является общей для множества программ и языков программирования. Различные реализации регулярных выражений отличаются друг от друга в деталях, но принципы, необходимые для обучения созданию регулярных выражений, одинаковы во всех их реализациях.

  • "Shell-кодинг" В данной статье рассматриваются простейшие примеры shell-программирования, Статья не является исчерпывающим руководством по shell- программированию, но может быть полезна при освоении его основ.

  • Mendel Cooper, Перевод: Андрей Киселев, "Advanced Bash-Scripting Guide" или "Искусство программирования на языке сценариев командной оболочки" Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток. . . постепенно, шаг за шагом раскрывая мудрость и красоту UNIX.

  • Ян Шилдс, "Подсказки по Linux: Функции сравнения и тестирования в Bash" Пояснения по конструкциям test , [, [[, ((, и if-then-else


  • Sunil Thomas Thonikuzhiyil, перевод: Иван Песин, Александр Куприн, "Разработка простых интерфейсов с помощью dialog/Xdialog" . Статья рассматривает применение программ dialog и Xdialog для реализации простых интерфейсов к скриптам. Это предполагает, что вы знакомы с написанием скриптов командного интерпретатора.

  • Интерпретатор командного языка shell
    Интерпретатор командного языка shell



  • Jos Nazario, Перевод: Ян Безус, "Введение в awk" Данный документ - это краткий обзор возможностей и особенностей awk (манипулирование файлами данных, выборка и обработка текста).

  • В.Катаев, "Жизнь в Linux. Советы профессионала. От скрипта до агента."

  • Абрамов Алексей, "Скрипт мониторинга репликации MySQL на shell"

  • Вадим Фёдоров, "Как послать письмо с аттачем в UNIX?" О том, как заставить скрипт, написанный на bash или shell, отправлять письмо с прикрепленным файлом?

  • Командный интерпретатор C-shell , М.П.Крутиков, Суперкомпьютерный Центр

  • Программирование на Shell (Unix) А. Соловьев,
    Та же книга , но в текстовом формате.



  • SHuRuP   Shell-coding: программируем в *nix-консоли

  • Андрей Головин, Регулярные выражения .
    Регулярные выражения - самый мощный инструмент работы со строками, который смогли выдумать современные программисты. С их помощью можно проводить анализ строк, на содержание последовательностей символов, производить замену на основе этой выборки, разбивать строки на массивы и многое другое.

  • С.Лапшанский, "Введение в автоматизацию [Опубликовано 23.07.2002] Часть 2. О полезных скриптах и запуске их через cron.

  • Вадим Хохлов, "Unix way: "Гарики", они и в Linux"е "гарики"." О наборе bash-скриптов для выбора различных интересных высказываний из какой-нибудь базы.
  • Язык C и C++

  • Н.Горшков, "Руководство по программированию на С++ с использованием libxml++" libxml++ это С++ API для популярного XML-парсера libxml, написанное на С.

  • Alexander Sidorov, "MinGW + Qt + Emacs HOWTO (Windows)" О настройке и использовании связки MinGW, Qt4 и Emacs под Windows для написания кроссплатформенных оконных приложений на языке С++. В статье рассмотрены вопросы установки компилятора языка С++, кросс-платформенной оконной библиотеки, установки и настройки среды разработки.

  • Иртегов Дмитрий Валентинович, "Многопоточное программирование с использованием POSIX Threads" Материалы курса, посвященного разработке многопоточных приложений на языках C/C++ с использованием POSIX Thread Library.

  • Nikolay N. Ivanov, "Секреты указателей языка C. Часть I."



  • "C/C++ API для SQLite 3" Переведено на руский язык более половины справочника "C/C++ API для SQLite 3", стартовал процесс перевода описания SQL-команд.

  • Отладка работы утилиты make
    Утилиты make, например, GNU make, System V make и Berkeley make, являются основополагающими инструментами, необходимыми для упрощения процесса сборки приложений. В этой статье вы познакомитесь со структурой файла makefile

  • "Решение проблем, возникающих при выполнении команд./configure, make и make install" Иногда стандартная последовательность для компиляции программы не работает. Она начинает выводить различные ошибки и не компилирует программу. В этой статье описано как избавиться от множества часто встречающихся ошибок.

  • "Особенности make.conf" /etc/make.conf - это файл, в котором указываются ключи оптимизации для компилятора.

  • Автор: Raghu J Menon, перевод: Андрей Киселев, "setjmp/longjmp в примерах" В статье описывается работа с набором макроопределений setjmp/longjmp, реализованных в языке программирования C.

  • "История языка C/C++" Исторически этот язык неотделим от операционной системы Unix, которая в наши дни переживает свое второе рождение.

  • Константин Тайтуров, "Доспехи для "Пингвина" Большинство современных реализаций компилятора языка Си не генерируют кода, контролирующего целостность границ переменных.

  • Mike Goblin, "Написание драйверов в Linux: первые шаги" Написание драйверов под Linux всегда казалось мне крайне сложным и загадочным делом. Но вот - два месяца назад мне понадобилось написать такой драйвер самому. Процесс оказался вовсе не сложным, и доставил мне массу удовольствия.
  • Mike Goblin, "Написание драйверов в Linux, часть 2" .

  • Кирилл Кочетков, "SPEC CPU2000. Часть 5 - Компиляторы. Дополнение 2" Сравнение трех компиляторов языка С для Линукс по быстродействию.

  • Rob Tougher, перевод: Андрей Киселев "Создание библиотек многократного использования"

  • Rob Tougher, перевод: Андрей Киселев, "Платформа для создания серверов приложений на C++"

  • "Fox-toolkit. Уроки по-русски. " FOX Toolkit - это быстрый и удобный кроссплатформенный тулкит (с++,ruby,python).

  • Автор: Bhaskaran, перевод: Андрей Киселев, "Создание драйвера сетевого устройства - Часть 1" Эта статья призвана помочь читателю в понимании принципов создания драйвера сетевой ethernet-платы для ОС Linux. Но она поможет вам и просто понять, как подключить сетевую плату.

  • Котельников Руслан, "Начало программирования в Linux"

  • Hyouck "Hawk" Kim, Перевод (c): Андрей Киселев, "Как запускается функция main() в Linux"


  • Rob Tougher, Программирование на C++ с использованием сокетов в Linux

  • Rob Tougher, Программирование с Xlib на C++

  • "Низкоуровневое программирование параллельных портов под *nix" ,

  • Ю.Ю.Громов, С.И.Татаренко, Тамбовский Государственный Технический Университет, Программирование на языке Си

  • Бьярн Страустрап, Введение в язык C++

  • Бьерн Страуструп Дизайн и эволюция языка С++ . В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++.



  • Справочное руководство по C++ Бьярн Страустрап, Библиотека М. Мошкова

  • Хрестоматия по программированию на Си в Unix Андрей Богатырев, Библиотека М. Мошкова Копия

  • Марченко А.Л. C++. Бархатный путь. Избранные главы

  • А.Калинин, "C или C++? "


  • Man к make (Перевод Козлов Ю.)

  • Дмитрий Черняк. Применение GNU make



  • Владимир Игнатов

  • Владимир Игнатов "Эффективное использование GNU Make"

  • Автор: (C) Tedi Heriyanto, Перевод: (C) Андрей Киселев, "Мини-руководство по созданию Makefile-ов"

  • Ричард М. Столмен и Роланд Х. Пеш Отладчик GNU уровня исходного кода . Восьмая Редакция, для GDB версии 20000326. Март 2000. Перевод Дмитрия Сиваченко.

  • Иван Шмаков, "Отладчик GDB"


  • "Обработка исключений в C++" . Язык С представляет программисту очень ограниченные возможности обработки исключений, возникших при работе программы. В этом отношении С++ намного развитее С. Здесь у программиста существенно большие возможности по непосредственной обработке исключений. Комитет по разработке стандартов С++ предоставил очень простую, но мощную форму обработки исключений.

  • А.Калинин, "Простой, но полезный аллокатор памяти " Эта заметка --- продолжение "Postfix изнутри" в том смысле, что в качестве примера опять берется postfix. Но если в прошлый раз postfix рассматривался "с высоты птичьего полета", то теперь, наоборот, будет взят небольшой кусочек программного кода, не имеющего никакой специализации, и приведен в качестве примера.


  • Программирование микроконтроллеров AVR с использованием GCC , автор Guido Socher
    В заметке рассказывается как настроить среду разаработки для 8-и битных микроконтроллеров AVR фирмы Atmel.

  • Gaurav Taneja, Программирование GUI в C++ с использованием библиотеки Qt, часть 1



  • Ariel Ortiz Ramirez, Перевод Андрей Киселев, "Программирование: C# -- типы данных "

  • Tom Bradley, Перевод: Андрей Киселев, "Добавление модулей расширения (плагинов) к программе."

  • Глеб Пахаренко, "Реализация сети в операционной системе Linux" В этой статье реализация сети рассматривается на уровне программного кода.

  • "indent - программа для автоматического форматирования C-исходников"
  • Pascal и Delphi

  • Joost van der Sluis, перевод А.Тарасова, Недавно вышел Free Pascal (FPC) версии 2.2.0. Этот компилятор языка Pascal сегодня является одним из самых примечательных компиляторов с открытым кодом. Каждый день все больше программистов узнают о FPC и начинают разработку своих приложений на Object Pascal. Особенно этому благоприятствует развитие Lazarus, графической среды разработки для FPC, которая содержит расширенный набор средств для разработки графических (GUI) приложений.

  • Рудюк С.А., "Lazarus - Delphi-кросс-платформенный. Программирование для свободных людей" Основная цель данной книги - показать возможность создания профессиональных коммерческих продуктов на Pascal. Данные программные продукты должны работать не только в платных операционных системах (например, Windows), но и бесплатных операционных системах (например, FreeBSD, Linux). Очень важно, чтоб разработка программы делалась без нарушения лицензионных соглашений и покупки дорогостоящего программного обеспечения (а для профессионалов - это один из самых важных вопросов в наше время).

  • Михаил Продан, "Lazarus - знакомство с бесплатным Delphi"

  • Анатолий Камынин, "Free Pascal: Свободный софт для свободных людей" Разговор наш пойдет о компиляторе Free Pascal Compiler (FPC), который распространяется группой разработчиков по общественной лицензии GNU.

  • Андрей Боровский, " X-Window: Несекретные окна" В этой статье речь пойдет о работе с X-Window средствами Kylix. Мы рассмотрим такие полезные возможности, как генерация скриншотов окон и отдельных элементов управления, поиск окна в иерархии окон X-Window, и некоторые другие

  • Marius Popa Adrian, перевод: Руслан Денисенко, "Установка среды разработчика на free pascal под Ubuntu Linux" Пошаговое руководство на русском языке по установке компилятора free pascal и delphi-подобной среды разработки lazarus на Ubuntu Linux.

  • Сердцев А.А., "Устранение проблем компиляции в Borland Kylix 3 при glibc 2.3.2"

  • Илья Аввакумов, "Отладчик GNU GDB" В этой статье описаны те команды GDB, которые позволяют проводить удобную пошаговую отладку программ, написанных на Free Pascal.

  • А. П. Полищук, С. А. Семериков, "Программирование в X Window средствами Free Pascal" . Целая книга, из которой можно узнать не только о программировании, но и об устройстве X Window (с чего авторы и начинают)! А вообще сайт посвящен языку Free Pascal, так что всем, интересующимся вопросами программирования под Линукс тоже рекомендуется сюда заглянуть.

  • И. Л. Шихалев, "Что такое Free Pascal, и с чем его едят?" Общий обзор компилятора Free Pascal, его возможностей, особенностей и т.д.

  • "Kylix tutorial" Серия статей о среде программирования на языке Pascal под Linux.


  • Арсений Чеботарёв, "Приложения для Linux - вариант Kylix"

  • Гоблин М., "Kylix tutorial" Описана установка Kylix, работа с базами данных через dbExpress и др.

  • Обзор Kylix (Delphi для Linux) Недавно выпущенный фирмой Borland продукт - Kylix (Delphi for Linux) вызвал большой интерес в среде разработчиков. На предрелизном этапе разработки мнения о Kylix порой были диаметрально противоположны, от экзальтированно-восторженных до агрессивно-негативных. Автор попытался в данной статье изложить свое мнение о данном продукте.

  • Мир Borland Kylix Этот сайт посвящен программированию в среде Borland Kylix, среде быстрой разработки приложений для операционной системы Linux.

  • Михаил Голованов Серия статей. Kylix Tutorial. 1. Установка Итак, свершилось, проходя мимо ларька с CD я увидел компакт с этикеткой синего цвета и магической надписью Kylix. Вернее диска было два и оба были немедленно куплены. Ставить Kylix я пробовал под RedHat Linux 7.0...

  • Михаил Голованов Серия статей. Kylix Tutorial. 2. Работа с базами данных через dbExpress Фирма Borland в Kylix и Delphi 6 реализовала новый движок для работы с базой данных dbExpress.


  • M.Goblin Серия статей. Kylix Tutorial. 2. Работа с базами данных через dbExpress. Первые шаги.

  • Вячеслав Беляев, Borland Kylix - инсталляция и первое знакомство Первое знакомство с Borland Kylix - средой программирования для Linux [Опубликовано 01.06.2001]

  • Питер Коффи (Peter Coffee), "Linux - в массы" Обзор новой системы разработки приложений от Borland - Kylix, которая сильно напоминает Borland Delphi - объектно-ориентированную среду на базе языка Pascal.
  • Язык Java

  • Новый русскоязычный новостной ресурс о Java технологиях - "javatech.info" .

  • Брайан Гетц (Brian Goetz), "Теория и практика Java: Методы безопасного конструирования"

  • Сергей Безденежных, "Программирование на Java c использованием GTK+" В этой статье вы узнаете о средствах, необходимых при создании приложений на языке Java для Gtk+ и Gnome.

  • Максим Бобаченко, "Введение в Java Server Faces" Java Server Faces (JSF) - это компонентная, событийно-ориентированная технология создания web-приложений на Java.

  • А.Федотов, "Мониторинг использования памяти с Java SE 5"

  • "Самостоятельная сборка JAVA(TM) 2 SE v.1.4.1 из исходников с sun.com"


  • Matthias Kalle Dalheimer, перевод: Andi Peredri, "Сравнение Qt и Java"

  • Лозовюк A. История Java. Как начиналась революция Интернет . Чтобы предвидеть будущее, надо понимать прошлое. История проекта Java интересна и поучительна сама по себе. Она дает понимание того, что можно ожидать и в будущем. Все в мире развивается по одним и тем же законам, и компьютерная индустрия - не исключение.

  • Sponge Bob, "Java против.NET - субъективный взгляд"



  • Java2 прокладывает дорогу к Linux (Майкл Визард, Дана Гарднер, Пол Крил , COMPUTERWORLD РОССИЯ #12, 99) Корпорация Sun Microsystems совместно с независимой группой разработчиков Linux Blackdown Porting Team создала Linux-версию комплекта разработчика на Java2 (Java2DK).


  • С.Б.Дунаев. Доступ к базам данных из Java-программ и проблемы русификации
  • Язык JavaScript

  • Питер Сибах, "Знакомимся с ECMAscript" У ECMAscript (известного в народе как JavaScript) довольно интересная история, ведь появился он как отступление от стандартов.


  • П.Храмцов. Практическое введение в программирование на JavaScript

  • Динамическая графика в Java сервлетах. Как создать графический счетчик посещений? Диаграмму, изображающую загруженность канала до провайдера или количество писем в очереди? Одним словом, как сформировать изображение динамически по запросу пользователя? В статье предлагаются варианты решения этой задачи...

  • Мельников М. "JavaScript: полезные функции"
    Продолжаем разговор о применении скриптов на web-страничках. И начнем мы, пожалуй, с написания некоторых функций, которые нам впоследствии очень пригодятся.

  • Мельников М. JavaScript и объектная модель
    Скриптовые языки в некотором роде перевернули мир, и именно благодаря им появился DHTML, который позволяет делать со страничкой практически что угодно. Как известно, всего два языка претендуют на лавры победителя в броузере. Это VBScript - подмножество Visual Basic-а и JavaScript. Вот последним мы и займемся, как наиболее универсальным.
  • Perl

  • Н.Анисимова, "Руководство по использованию Perl модуля PDF::API2 для начинающих " Обзорный материал, который предназначен помочь программистам Perl в практической работе, при создании PDF-документов.


  • Аллан Педа, "Создание системы голосования на Perl/CGI"

  • "Киевская Perl User Group" К сожалению живых ресурсов по Перл в уанете и рунете не много, возможно кому-то окажеться полезной. Уже сейчас там опубликовано несколько интересных материалов...



  • Xavier Calbet, перевод А.Тарасова, PDL - это расширения языка Perl для численных расчетов и построения графиков. В этой статье будет построено множество Мандельброта с помощью PDL и других систем численного расчета. Проведено качественное сравнение и сравнение производительности.



  • "Переводы документации perl в формате pdf" , такие как: справочник по Perl:DBI для MySQL, документация к модулю CGI.pm, учебник по regexp, перевод документации к модулю Libwww-perl, полная спецификация DBI и DBD::mysql.

  • Арсений Чеботарев, "Perl: полное изложение с примерами"

  • Роман Иманкулов, "Об алмазах под нашими ногами" Немного о Perl и Makefile.

  • (20.12.2003) Новый сайт - "Perl 6" Ссылки и полезные заметки по использованию Perl 6 и виртуальной машины Parrot. Своего рода дневник изучения Perl 6....

  • В.Максименко, "Реализация теста Тьюринга на Perl" В статье описан метод защиты от автоматического заполнения и отправки формы с сайта путем динамической генерации картинки с кодом и подтверждения правильности ввода.

  • Sean M. Burke, Перевод: Дмитрий Николаев, "Web Основы с LWP" LWP (сокращение от "Library for WWW in Perl") это очень популярная группа модулей языка Perl для доступа к данным в сети Internet.

  • Дэйв Гросс, перевод Alex Ten. "Изменение поведения хэша с использованием функции tie" "Исходя из моего опыта, можно сказать, что хэш - самая полезная встроенная структура данных в Perl."

  • "Создание серверных приложений на языке PERL" Ускоренный учебный курс.

  • Подборка материалов по языку Perl с того же "сайта"


  • Guido Socher, перевод на русский: К.Пухляков, "Обработка HTML кода на Perl, HTML::TagReader"

  • "Ларри Уолл о Perl 6" С любезного разрешения Ларри Уолла, изобретателя Perl, вам предлагается перевод статей о Perl 6 из цикла.

  • Stephen Wilhelm, перевод Dmitriy A. Kuvshinov, "Описание Gtk-Perl" Переводчик просит помочь ему в завершении перевода. Если есть желание и возможность - подключайтесь!

  • С.Богомолов, Perl (установка)

  • Александр Смысловский. Perl, который оценят все . Язык Perl был создан в 1986 г. и первоначально предназначался для обработки текстов. Отсюда и его название - Practical Extraction and Report Language (язык извлечения и составления отчетов). Но прошли годы,и теперь Perl используется для решения гораздо более широкого круга задач. Это один из самых популярных языков для написания CGI скриптов,благодаря чему в последние годы его популярность резко пошла вверх. Знакомимся!

  • ru.Perl FAQ Павел Аммосов , Артур Пенттинен , Михаил Поляков , Григорий Строкин Копии

  • В.Маслов. "Введение в Perl"
    Копия

  • Рэндал Шварц, Том Кристиансен "Изучаем Perl" Перевод с английского C.M. Тимачева

  • Руководство по Perl 5.003 на русском Аннотация. От простого к сложному. Запуск Перл - программ. Синтаксис. Встроенные переменные. Шаблоны. Операторы и приоритеты. Встроенные функции. Подпрограммы. Форматы отчетов. Отладка.



  • Игорь Яровинский, "Создание графических интерфейсов на Perl+Tk."


  • Perl 5 Reference Guide. Руководство по Perl 5. Автор Johan Vromans. (на английском).

  • PERL - Practical Extraction and Report Language. Для удобства доступа Perl-руководство разбито на многие разделы. Perl объединяет некоторые характеристики C, sed, awk, и sh, так что люди знакомые с этими языками не должны иметь с ним трудностей. (на английском).

  • Ben Okopnik, Изучаем Перл, часть 1

  • Ben Okopnik, Изучаем Perl, часть 2

  • Ben Okopnik, Изучаем Perl. Часть 4.

  • "Однострочник месяца на Perl: апрель -- жесточайший месяц"

  • Ben Okopnik, Перевод: Павел Соколов, "Однострочник месяца на Perl: Приключение с неправильно названными файлами"

  • Ben Okopnik, Перевод: Павел Соколов, "Однострочник месяца на Perl: Дело о совпадающих UID"

  • Ben Okopnik, Перевод: Павел Соколов, "Однострочник месяца на Perl: Приключение с произвольными архивами."

  • Mark Nielsen, Гарантированная очистка жесткого диска с помощью Perl

  • Mark Nielsen, Cовместное использование Perl и PostgreSQL

  • Как "оживить" Perl/CGI скрипт Данная статья призвана помочь взять "быстрый старт" тем, кто решил строить Web-приложения "своими руками" и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister).

  • Создание индекса для сайта. Описывается создание скрипта на Perl, просматривающего все странички сайта на предмет meta description и meta keywords и составляющего итоговую таблицу - индекс, или предметный указатель.


  • Том Кристиансен, Натан Торкингтон, Perl: библиотека программиста Книга содержит обширную коллекцию путей решения большинства проблем, возникающих при работе с языком Perl. Рассматривается широкий круг вопросов: от основ техники программирования до профессиональных тонкостей, от манипуляций со строками, числами и массивами до создания баз данных SQL, от сценариев CGI и Интернет-приложений до разработки серьезных систем клиент-сервер.

  • WebScript.ru: скрипты и программирование для вэба (PHP, Perl). Статьи по Perl.

  • Дмитрий Лялюев, "Три письма на Perl" Рассматривается написание на этом мощном языке программирования скрипта для создания и отправки писем.

  • Ерижоков А.А., PCRE Статья о наборе функций для поддержки регулярных выражений, использующих синтаксис Perl.

  • Стас Бекмен (Stas Bekman), "Почему mod_perl?" Перевод: Захарова Инга

  • Стас Бекмен (Stas Bekman), "mod_perl за 30 минут. Часть I" Перевод: Захарова Инга

  • Миско Д. Как "оживить" Perl/CGI скрипт
    Данная статья призвана помочь взять "быстрый старт" тем, кто решил строить Web-приложения "своими руками" и выбрал в качестве средства для их создания язык программирования Perl (Practical Electric Rubbish Lister).

  • "Исследование Perl модулей, часть 1. Создание графики на лету с использованием GD"

  • Pradeep Padala, перевод Алексей Чегляков, "Исследование Perl модулей, часть 2: Рисуем диаграммы с использованием GD::Graph"

  • Арсений Чеботарев, "Бесполезный Perl и общая теория улучшения мира" О реверсе исходного кода с примерами на языке Perl.

  • Павел Голубев, "Создание сайтов с возможностью печати PDF на примере PDF::API2" Демонстрация возможностей Perl модуля PDF::API2 по созданию PDF отчетов.
  • PHP

  • "Типичные проблемы безопасности PHP скриптов в примерах" В презентации наглядно на простых примерах в популярных PHP скриптах рассказывается о типичных ошибках PHP программистов, приводящих к серьезным проблемам безопасности.

  • Sergej Ermakov, PHP как FastCGI и распределение прав

  • Роберт Брэдли, "Как добавить интернациональную поддержку в ваши PHP-приложения"

  • "Path Disclosure: дела путевые" О том, как взламываются PHP-скрипты.

  • Изучаем PHP, Часть3: Аутентификация, работа с потоками данных, объекты и исключения
    Из этого учебного пособия вы узнаете, как использовать PHP для создания приложения, поддерживающего workflow, узнаете о HTTP-аутентификации, потоках данных, создании объектов и обработке исключений.

  • Изучаем PHP, Часть 2: Загрузка файлов на сервер и использование XML для хранения информации о файлах
    Из этого учебного пособия вы узнаете, как использовать PHP для создания приложения, поддерживающего workflow.

  • Изучаем PHP, Часть 1: Страница регистрации, формы и взаимодействие с базой данных
    Из этого учебного пособия вы узнаете, как использовать PHP для создания простейшего приложения, поддерживающего workflow, научитесь строить PHP-страницы с использованием HTML-форм и получать доступ к базам данных.

  • Сессии PHP. Часть 4 (следующие и предыдущие части можно прочитать )

  • Бойко Сергей, "Своя CMS на PHP. Часть 1"

  • Harry Fuecks, перевод: Муллин Сергей, Кузьма Феськов, "Кэширование в PHP"

  • John Lim, перевод Кузьма Феськов, "HOWTO по оптимизации PHP"

  • Andi Gutmans, Stig Bakken и Derick Rethans, перевод - Вадим Крючков, "Что нового в РНР 5?"

  • Феськов Кузьма, "Большие возможности маленького сайта" (Работа с Zip архивами на PHP).

  • Перевод: Эдгар Мкртчян, "PEAR HTML_QuickForm: Руководство для начинающих" Перед вами простое введение в HTML_QuickForm - одну из частей PEAR (PHP Extension and Application Repository).

  • Sterling Hughes, перевод: Дмитрий Короленко, "21 ошибка программиста PHP" PHP очень прост в изучении. Это привлекает многих людей; однако, несмотря на его кажущуюся простоту, не так-то просто научиться использовать этот язык правильно и эффективно.

  • Стерлинг Хьюз, "21 ошибка программиста PHP".
    "Часть I
    "Часть II
    "Часть III "Top 21 PHP progamming mistakes" by Sterling Hughes, January 14, 2001 http://www.zend.com/zend/art/mistake2.php, Перевод: Данил Миронов.

  • "Безопасная настройка PHP для виртуального хостинга на UNIX"

  • "Списки файлов" Рассматриваются способы выполнения основных операций с группами файлов (чтение содержимого папки, рекурсивное чтение папки, рекурсивное чтение папки по определенным типам файлов, а также печать дерева каталога) в PHP.

  • "PHP Inside" - русскоязычный электронный (PDF) журнал, предназначенный для web-программистов, которые используют РНР в своих разработках.

  • Monte Ohrt, Andrei Zmievski, Sergei Suslenkov, 21-05-2004, "Smarty - компилирующий обработчик шаблонов" Несмотря на то, что PHP называют "языком, встраиваемым в HTML", после написания нескольких проектов, где смешаны PHP и HTML, многие понимают, что разделение формы и содержания - Хорошая Вещь!


  • David Lechnyr, перевод: Андрей Киселев, "Безопасность средствами суперглобальных массивов в PHP"



  • http://phpclub.unet.ru/ Клуб разработчиков PHP & MySQL. Cтатьи, обзоры, почтовые рассылки, русская документация по PHP & MySQL примеры кода. Полезная информация по созданию интернет-магазинов, порталов, WWW-баз данных. Есть готовые разработки (бесплатно).


  • Д.Свирепчук, "ПеРсоНальный опРос" О скрипте на РНР для создания опроса на сайте.

  • Денис Мигачев, "PHP и MySQL. Часть 1. Прямая работа с MySQL "

  • Александр Неткачев, "Альтернатива DOM XML на PHP (PHP4)" , 15.04.2004.

  • Александр Неткачев, "Переход к PHP5" В своем обзоре я попытался дать наиболее полное представление о изменениях в PHP5, насколько это возможно.

  • Александр Неткачев, "Пишем PHP код, устойчивый к ошибкам"
    "Пишем PHP код, устойчивый к ошибкам"

  • С.Тарасенко. Работа с cookies на PHP.

  • А.Орлов PHP: секреты интерактивности

  • Ambersky R., "Скрипт показа баннеров на PHP4" Скрипты показа баннеров, изложенные в этой статье довольно элементарны. Описания баннеров, количество кликов и показов хранится в текстовом файле, поэтому наличия MySQL не требуется.

  • HTTP Установка защиты на страницу используя MySQL и PHP. Это - обучающая программа которая должна вам показать основы защищиты ваших страниц в сети, использующие HTTP аутентификацию. Вместо традиционного.htaccess метода (Apache сервер), мы собираемся использовать для хранения данных о пользователях и их пароли в MySQL. Я постараюсь максимально разжевать все на, что по моему разумению требуется для начинающего изучать MySQL и PHP.

  • Букварь по PHP и mySQL (pdf-файл) Данный труд не ставит целью заменить собой мануалы по PHP и MySQL. Данный букварь просто поможет вам сделать первые шаги в изучении PHP и способах взаимодействия его с БД MySQL.

  • Adam Trachtenberg и David Sklar (8/3/99) Перевод Н.В.Костроминой. (все в одном файле - ).

  • Осипов Алексей, "Сбор статистики на PHP" Каждый веб-мастер хочет знать хоть чуть-чуть о своих посетителях. В этой статье рассказано, как легко создать простую систему сбора данных о посетителях.

  • Стиг Сэтер Баккен и др., "Руководство по PHP"

  • Т. Ратшиллер, Т. Геркен "Доступ к базам данных средствами PHP" Глава из книги "PHP4: разработка Web-приложений. Библиотека программиста (+CD)"

  • Shawn Wallace Введение в PHP Перевод: Mike J.K. ([email protected])

  • С.Лосев. PHP и MySQL - рабочие инструменты сайтостроителя.

  • С.Лосев. Рабочие инструменты сайтостроителя.
    В этой статье из цикла, посвященного современному "сайтостроению", рассказывается о популярной системе MySQL и языке программирования PHP, как с их помощью можно решать задачи, с которыми сталкивается любой разработчик Интернет-сайта - подготовка и отображение новостей, ввод и отображение текстовой информации, поиск на сайте, организация дополнительных сервисов ("узнавания" посетителя, форумов, опросов и т.д.). Оба эти средства являются бесплатными и предоставляются всеми без исключения хостинг-провайдерами.
    Часть 1. Первое знакомство с PHP и MySQL
    Часть 2. Кругом новости, но как их ввести и отобразить?
    Часть 3. Статьи для сайта
    Часть 4. Дополнительные сервисы

  • Приемы безопасного программирования веб-приложений на PHP Цель этой статьи - показать некоторые приемы для защиты веб-приложений типа WWW-чатов, гостевых книг, веб-форумов и других приложений подобного рода... Копия .

  • Bryan Brunton, Торговые Империи: программирование собственной вселенной на PHP

  • WebScript.ru: скрипты и программирование для вэба (PHP, Perl). Статьи по PHP.

  • Ильин С. Религия PHP PHP - это интерпретируемый язык для создания активных Web-страниц. Он очень похож на Perl и ASP, но на порядок удобнее их. На данный момент Apache с PHP - самый популярный веб-сервер.

  • А.Кухарчик РНР для всех!




  • Денис Колисниченко, Обзор сетевых функций PHP (Оригинал: http://www.softerra.ru/review/program/16851/) Опубликовано: 21.03.2002

  • Андрей Гончаренко,
  • В Linux есть превосходная среда разработки прикладных программ .

    Немного о среде программирования Gambas. Язык и среда программирования созданы молодым французом Benoit Minisini из предместий Парижа для собственного удовольствия, которое он получает как от создания компиляторов, так и от на флейте, и от обучения актерскому мастерству, и от работы в качестве профессионального программиста.

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


    Пункт меню File , который обычно служит для работы с файлами, в данном случае служит для работы с файлами проекта: New project... (создание нового проекта), Open project... (открыть проект), Open recent (открыть недавний проект), Open example (открыть пример), Save project (сохранить проект), Quit (и выйти).

    Для работы над проектом, служит раздел Project :

    Это, соответственно, компиляция файла, компиляция проекта, создание исполняемого файла, создание архива исходного текста, создание установочного пакета, свойства проекта, очистка и обновление проекта.

    Два пункта меню могут быть непривычны для пользователей Windows – создание архива исходных текстов и установочного пакета. Но не следует забывать, что и программы, и сама операционная система Linux всегда существуют в виде открытых исходных кодов. В Linux можно установить программу двумя способами, либо используя исходный код и средства операционной системы для компиляции и установки программы, либо используя готовый установочный пакет, подобный Setup в Windows. Правда, в разных дистрибутивах Linux такой установочный пакет может быть разным, и не всегда его можно установить, дважды щелкнув мышкой по установочному пакету.

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

    Далее следуют разделы вида - View (открывающий и закрывающие все окна диалога рабочей области), инструментов (Tools ) и подсказок (? ). В последнем разделе достаточно подробный Help browser , основанный на Wiki в последней версии программы.

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

    Графическая работа над формой проекта и кодом программы может вестись быстрым переключением с помощью ярлычков, на рисунке ниже Fmain.form и Fmain.class , щелкая мышкой по которым попадаешь в графический редактор или редактор кода. Каждый из них имеет свое основное инструментальное меню. На рисунке ниже – инструментальное меню графического редактора.

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

    По мере создания сложного проекта со множеством форм и собственных классов, можно использовать окно «дерева» проекта.

    Запускаем Gambas, который находится в разделе основного меню Приложения :

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

    Чтобы создать новый проект выбираем New project.

    Открывается диалог, в котором можно ввести название проекта, его заголовок, указать место, где проект будет располагаться. Gambas хранит все, что относится к проекту, в заданной директории, которая будет носить имя проекта. Для перемещения по диалогу достаточно нажимать клавишу Next , но в самом начале следует выбрать, какого рода проект вы намерены создать. На выбор три варианта – графический проект, терминальный проект, использование копии существующего (вашего или нет) проекта

    Выбираем, к примеру, графический проект.

    Выбрав графический проект, дав ему имя и место жительства, мы попадаем в среду программирования, которая позволит сделать первый шаг – создать форму. Для этого в правом окне менеджера проекта, где отображается «дерево» проекта, щелкаем правой клавишей мышки по разделу Forms , а в выпадающем меню выбираем раздел New , что приводит к меню выбора, в котором есть пункт Form (создать новую форму). Форма является основным окном программы, которое появится, когда форму заполнить некоторым содержанием, и построить проект. В окне диалога создания формы можно задать имя формы, что важно для средних и больших проектов, содержащих много окон, можно установить ряд опций.

    Щелкнув по клавише OK , появляется форма и редактор программы. На форме, видимо, можно будет разместить разные кнопочки, окошки и другие средства программы. А в редакторе поместится все то, что и будет кодом программы.

    Форма, как и многие элементы управления, имеет свойство Text , это текст, который появится вместо надписи Form1.Form при выполнении программы. Если щ елкнуть по форме правой клавишей мышки, в выпадающем меню появится пункт Code , который вызывает редактор кода.


    Отдельную область занимает инструментарий проекта – Toolbox . Построенный аналогично рабочей области, он тоже имеет различные ярлычки, открывающие страницы, на которых размещаются средства создания проекта.

    Окно списка доступных компонентов Gambas

    Программа интуитивно понятна и очень удобна, к тому же, благодаря всплавающим подсказкам, сама помогает писать вам программный код.

    Оставьте свой комментарий!

    Всем привет! Это первая статья о программировании на Си, в котором мы настроим тестовый редактор и узнаем немного о истории языка Си, возможностях, преимуществах и недостатках.

    Языку Си в 2012 году исполнилось 40 лет. Си стал родоначальником C++, Java, Perl, C#, JavaScript и тд. Это самый популярный язык программирования в мире. Си процедурный язык программирования. Файлы кода имеют расширение.c а заголовочные файлы.h. На Си вы можете программировать для Linux, Windows, Windows Phone, Mac OS, iOS, Android и тд. Любой программист должен владеть языком программирования Си. Что бы стать программистом читать одних книг и статей мало. Нужно еще и практиковать. Поэтому мы рассмотрим наши уроки обязательно с примерами. Если у вас возникнет какие то вопросы, то можете задавать в комментариях. Так же этим мануалом могут пользоваться пользователи Windows и Mac OS. Пользователи других ОС могут пользоваться например NetBeans в качестве компилятора (NetBeans поддерживает не только Си но и Java, PHP, C++, Python и Ruby)

    Настройка

    Для программирования на понадобится текстовый редактор (gedit) и компилятор (gcc - входит в состав Ubuntu). Компилятор настраивать не нужно, а вот текстовый редактор настроим сейчас.

    Откройте Правка -> Настройки . Установите галочки на следующие пункты:

    • Показывать номера строк;
    • Подсвечивать текущую строку;
    • Подсвечивать парные скобки;
    • Можно так же изменить тему в вкладке Шрифты и цвета.

    Пара выполненных «махинаций» с gedit упростят на работу с текстовым редактором. А в дальнейшем мы рассмотрим какой-нибудь IDE (интегрирования среда разработки).



    © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows