Архив рубрики: Книги о программировании под Linux.

Мы собрали для вас 10 лучших видеокурсов, изучение которых поможет вам начать работу с Linux и разобраться в особенностях данной системы.

1. Linux для начинающих

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

2. Серия уроков «Научись Линукс»

Данный видеокурс предназначен для начала работы с Линукс. Поможет в установке данной системы на ваш ПК. Аудитория данного видеокурса — это люди, которые немного, но слышали про Линукс.

3. Курс лекций по администрированию Линукс

Подробный видеокурс по администрированию Линукс. Он рассматривает разные вопросы: от предназначения данной системы до администрирования MySQL. Подходит как новичкам, так и уже опытным пользователям Линукс.

4. Программирование на Bash

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

5. Администрирование Линукс

Данный курс обеспечит вас базовыми знаниями Линукс и поможет получить сертификат LPIC-1. Если вы хотите подкрепить свои знания сертификатом LPIC-1, то этот курс точно для вас.

6. Основы Линукс

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

7. Основы работы с командной строкой

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

8. Видеокурс по GNU/Linux Владимира Моженкова

Видеокурс по основам работы с GNU/Linux, простой и понятный. Данный видеокурс нацелен как на новичков, так и на опытных пользователей Линукс.

9. Серия уроков «Ваш путь в мир Линукс!»

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

10. Администрирование Linux

Последним в нашем списке идет видеокурс, в котором подробно рассказываются все аспекты работы с Линукс. Данный видеокурс расширит знания опытных пользователей, курс рассчитан на тех, кто уже как-то знаком с Линукс, но хочет знать о нём больше.

Книги о программировании под Linux, скачать бесплатные книги, самоучители и учебники о программировании под Linux в хорошем качестве

Описание книги UNIX. Разработка сетевых приложений : Новое издание книги, посвященной созданию web-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию.

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

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

Среди рассматриваемых тем: организация ветвления процессов и передача информации между ними с использованием сетевых механизмов, создание интерактивных утилит с графическим интерфейсом, организация взаимодействия с базами данных и создание приложений для Google App Engine. Кроме того, авторы книги создали доступную для загрузки и свободно распространяемую виртуальную машину на базе Ubuntu, включающую исходные тексты примеров из книги и способную выполнять примеры, использующие SNMP, IPython, SQLAlchemy и многие другие утилиты.

Издание рассчитано на широкий круг специалистов — всех, кто только начинает осваивать язык Python, будь то опытные разработчики сценариев на языках командной оболочки или относительно мало знакомые с программированием вообще.

Описание книги GCC. Настольная книrа пользователей, проrраммистов и системных администраторов : GCC — основной компилятор проекта GNU. Он поддерживает набор всех наиболее используемых языков программирования и обеспечивает перенос программ на десятки аппаратных платформ. Все свободно распространяемое программное обеспечение, включая и компиляторы, на том или ином уровне основываются на GCC.

В книге даются подробные сведения о получении, конфигурировании, установке и тестировании компилятора. Представлено построение кросс-компилятора и создание встраиваемых систем, детально описывается компиляция программ на языках С, C++, Objective-C, Fortran, Java и Ada. А также сочетание в одной программе нескольких языков программирования и включение в нее частей, написанных на ассемблере или языках системного уровня. В этой книге можно найти практически любые сведения, достаточные не только для разрешения ваших проблем, но и для участия в разработке и поддержке самого компилятора GCC.Книга будет полезна: программистам-разработчикам и руководителям программных проектов; администраторам и системным программистам, которым приходится заниматься переносом программного обеспечения и приложений; пользователям, заинтересованным в использовании программ с открытым исходным кодом. И всем сторонникам развития движения по созданию свободно распространяемых программ.

Описание книги Linux. Системное программирование :
Эта книга о том, как создавать программное обеспечение под Linux, эффективно используя возможности системы — функции ядра и базовые библиотеки, включая оболочку, текстовый редактор, компилятор, отладчик и системные процедуры. Большая часть программного кода для Unix и Linux написана на системном уровне, поэтому в книге основное внимание сфокусировано на приложениях, находящихся вне ядра, таких как Apache, bash, cp, vim, Emacs, gcc, gdb, glibc, ls, mv и прочих.

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

  1. Введение и важнейшие концепции
  2. Файловый ввод-вывод
  3. Буферизованный ввод-вывод
  4. Расширенный файловый ввод-вывод
  5. Управление процессами
  6. Расширенное управление процессами
  7. Управление файлами и каталогами
  8. Управление памятью
  9. Сигналы
  10. Время

Описание книги Основы программирования в Linux :
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек С/C++ и стандартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др.

Описана компиляция программ, их компоновка с библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME и KDE, хранения данных с использованием СУБД MySQL и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

  • Приступая к работе
  • Программирование средствами командной оболочки
  • Работа с файлами
  • Окружение Linux
  • Терминалы
  • Управление текстовыми экранами с помощью библиотеки curses
  • Управление данными
  • MySQL
  • Средства разработки
  • Отладка
  • Процессы и сигналы
  • Потоки POSIX
  • Связь между процессами: каналы
  • Семафоры, совместно используемая память и очереди сообщений
  • Сокеты
  • Программирование в GNOME с помощью GTK+
  • Программирование в KDE с помощью Qt
  • Стандарты Linux

  • Sivarama P. Dandamudi
  • Издательство: Springer
  • Год: 2005
  • Язык: Англий ский
  • Страниц: 568
  • Формат: pdf
  • Размер: 26 МБ

Описание книги :
This unique guide provides comprehensive coverage of the key elements of Assembly language programming with in-depth coverage of the Linux operating system, which is the fastest-growing operating system with an estimated 18 million Linux users worldwide. The book specifically targets professionals who would like to learn Assembly and intend or expect to move to the Linux operating system.

This highly useful guidebook comes complete with all the necessary software (Linux, NASM, debugger), making it an extremely valuable resource tool for all those who want to learn Assembly programming and Linux. Readers need only have a basic knowledge of any structured, high-level language such as C to obtain the full benefits of this guidebook. Sivarama P. Dandamudi is a professor of computer science at Carleton University in Ottawa, Ontario, Canada, as well as associate editor responsible for computer architecture at the International Journal of Computers and Their Applications. He has more than two decades of experience teaching about computer systems and organization.

  • Computer organization, including digital logic circuits, memory organization, IA-32 architecture
  • Installing and using Linux and NASM
  • Debugging assembly language programs
  • Overview of assembly language instructions
  • Writing procedures, addressing modes, conditional execution, logical and bit operations
  • Advanced assembly language, including string processing, ASCII and BCD arithmetic, recursion, protected-mode interrupt processing, high-level language interface, floating-point operations

Описание книги Pro Oracle Database 11g RAC on Linux :
Pro Oracle Database 11g RAC on Linux provides full-life-cycle guidance on implementing Oracle Real Application Clusters in a Linux environment. Real Application Clusters, commonly abbreviated as RAC, is Oracle’s industry-leading architecture for scalable and fault-tolerant databases. RAC allows you to scale up and down by simply adding and subtracting inexpensive Linux servers. Redundancy provided by those multiple, inexpensive servers is the basis for the failover and other fault-tolerance features that RAC provides.

Written by authors well-known for their talent with RAC, Pro Oracle Database 11g RAC on Linux gives you a rock-solid and technically flawless foundation on which to build your RAC-management skills. Authors Julian Dyke and Steve Shaw share their hard-won experience in building RAC clusters, showing you how to build for success using the very latest Oracle technologies, such as Automatic Storage Management (ASM) and Oracle Clusterware. You’ll learn to troubleshoot performance and other problems. You’ll even learn how to correctly deploy RAC in a virtual-machine environment based upon Oracle VM, which is the only virtualization solution supported by Oracle Corporation.

RAC is a complex and powerful technology. It demands expertise in its deployment. You can’t just “wing it” in creating a RAC solution. Julian and Steve have earned the right to term themselves expert-in Pro Oracle Database 11g RAC on Linux, they offer a rigorous and technically-correct treatment of RAC that helps you build a solid foundation of expertise and achieve success.

Описание книги Python for Unix and Linux System Administration :
Python is an ideal language for solving problems, especially in Linux and Unix networks. With this pragmatic book, administrators can review various tasks that often occur in the management of these systems, and learn how Python can provide a more efficient and less painful way to handle them.

Each chapter in Python for Unix and Linux System Administration presents a particular administrative issue, such as concurrency or data backup, and presents Python solutions through hands-on examples. Once you finish this book, you"ll be able to develop your own set of command-line utilities with Python to tackle a wide range of problems.

Discover how this language can help you:

* Read text files and extract information
* Run tasks concurrently using the threading and forking options
* Get information from one process to another using network facilities
* Create clickable GUIs to handle large and complex utilities
* Monitor large clusters of machines by interacting with SNMP programmatically
* Master the IPython Interactive Python shell to replace or augment Bash, Korn, or Z-Shell
* Integrate Cloud Computing into your infrastructure, and learn to write a Google App Engine Application
* Solve unique data backup challenges with customized scripts
* Interact with MySQL, SQLite, Oracle, Postgres, Django ORM, and SQLAlchemy

With this book, you"ll learn how to package and deploy your Python applications and libraries, and write code that runs equally well on multiple Unix platforms. You"ll also learn about several Python-related technologies that will make your life much easier.

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

Описание книги Программирование на C++ в Linux :
Книга посвящена созданию приложений, написанных на языке C++, в среде разработки KDevelop. Дано описание способов взаимодействия компонентов приложений. Рассмотрена работа с утилитой Qt Designer и описаны основные элементы управления, используемые в диалоговых окнах, а также классы, созданные для работы с ними. Читатель знакомится с концепцией Документ/Представление и учится создавать элементы пользовательского интерфейса приложения. Кроме того, в отдельных главах разбираются вопросы вывода на экран различной информации, сохранения и восстановления ее из файла, создания текстовых редакторов, работы с шаблонами классов и функций и организации многозадачности в приложении на основе взаимодействующих процессов. В завершение предоставляются рекомендации по созданию справочной системы приложения.

В книге идет речь о программировании GUI приложений с использованием Qt4 и среды разработки KDevelop.

Название : Программирование на C++ в Linux.

Книга "Программирование на C++ в Linux" посвящена разработке приложений на С++ в среде разработки KDEvelop. Автор книги дает подробное описание взаимодействий компонентов приложений, рассматривает основы работы с утилитой Qt Designer и обсуждает элементы управления в диалоговых окнах и классы, для которых они созданы. Книга учит концепции Документ/Представление, созданию элементов интерфейса приложения. Затрагиваются и такие темы, как сохранение и восстановление различной информации, выводимой на экран, разработке текстовых редакторов, организации многозадачности в приложениях на основе взаимодействующих процессов, работе с шаблонами классов и функций. Как заключение, автор дает полезные рекомендации по созданию справочной системы для разработанного приложения. Книга предназначена для профессиональных программистов.


Книга посвящена созданию приложений, написанных на языке C++, в среде разработки KDevelop. Дано описание способов взаимодействия компонентов приложений. Рассмотрена работа с утилитой Qt Designer и описаны основные элементы управления, используемые в диалоговых окнах, а также классы, созданные для работы с ними. Читатель знакомится с концепцией Документ/Представление и учится создавать элементы пользовательского интерфейса приложения. Кроме того, в отдельных главах разбираются вопросы вывода на экран различной информации, сохранения и восстановления ее из файла, создания текстовых редакторов, работы с шаблонами классов и функций и организации многозадачности в приложении на основе взаимодействующих процессов. В завершение предоставляются рекомендации по созданию справочной системы приложения.

Содержание :
Введение
Для кого предназначена эта книга?
Структура книги
Соглашения, принятые в данной книге
Требования к аппаратным средствам и программному обеспечению
Глава 1 Взаимодействие компонентов приложения
Сигналы и приемники
Посылка сигналов
Реализация приемников
Реализация соединения
Обработка событий
Работа с окном
Работа с фокусом ввода
Работа с мышью
Работа с клавиатурой
Реализация перетаскивания
Фильтры событий
Синтетические события
Последовательность обработки событий
Заключение
Глава 2 Диалоговые окна и простейшие элементы управления
Создание диалогового приложения
Создание заготовки приложения
Создание заготовки диалогового окна
Завершение создания диалогового приложения
Создание специализированных диалоговых окон
Создание диалогового окна с вкладками
Создание мастера
Глава 3 Классы элементов управления
Класс списка
Классы линейного регулятора и линейного индикатора
Работа с датой и временем
Глава 4 Классы приложений, документов и представлений
Многооконное приложение Qt
Класс документа
Класс представления
Класс приложения
Многооконное приложение KDE
Класс документа
Класс представления
Класс приложения
Глава 5 Создание элементов пользовательского интерфейса
Пользовательский интерфейс библиотеки Qt
Внесение изменений в меню
Работа со строкой состояния
Пользовательский интерфейс приложений KDE
Внесение изменений в меню
Настройка панели инструментов
Работа со строкой состояния
Глава 6 Вывод информации на экран
Рисование фигур
Работа с кистью
Перерисовка окна
Синхронизация объектов представления
Вывод текста
Работа с битовыми образами
Алпаратно-зависимые битовые образы
Аппаратно-независимые битовые образы
Глава 1 Работа с файлами документов
Сохранение и восстановление информации в приложении
Настройка диалоговых окон
Внесение изменений в меню
Установка рабочего каталога
Глава 8 Работа с текстовыми документами
Создание простейшего текстового редактора
Создание более сложного редактора
Создание редактора KDE
Глава 9 Шаблоны и классы коллекций
Шаблоны
Понятие шаблона
Шаблоны функций
Шаблоны классов
Классы коллекций
Виды классов коллекций
Массивы
Связные списки
Карты отображений
Другие классы коллекций
Глава 10 Реализация многозадачности в приложении
Взаимодействие процессов
Создание клиента для простейшего сервера
Создание более сложного сервера
Создание клиента
Некоторые замечания
Глава 11 Справка в приложении
Формы представления справочной информации
Способы доступа к справочной системе
Способы представления справочной информации
Формы представления информации
Программирование контекстной справки
Вывод подсказок
Вывод справочной информации в строку состояния
Получение информации по конкретному элементу
пользовательского интерфейса
Программирование командной справки
Формат файлов командной справки приложений Qt
Создание демонстрационного приложения Qt
Приложение 1 Что на CD
Приложение 2 Ресурсы Интернета
Предметный указатель

Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Программирование на C++ в Linux - Николай Секунов - fileskachat.com, быстрое и бесплатное скачивание.

Скачать pdf
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.

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

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

Исторически сложилось так, что ядро Unix было написано на языке Си. Даже более того, этот язык был создан для написания ядра Unix. Поскольку ядро Linux было основано на ядре Minix (версии Unix), то оно тоже было написано на Си. Поэтому можно сказать, что основной язык программирования для Linux это Си и С++. Такая тенденция сохранялась на протяжении долгого времени.

А вообще, писать программы для Linux можно почти на любом языке начиная от Java и Python и заканчивая С# и даже Pascal. Для всех языков есть компиляторы и интерпретаторы. Писать программы на С++ сложно, а Си многими уже считается устаревшим, поэтому множество программистов используют другие языки для написания программ. Например, множество системных инструментов написаны на Python или Perl. Большинство программ от команды Linux Mint, установщик Ubuntu и некоторые скрипты apt написаны на Python. Множество скриптов, в том числе простые скрипты оптимизации написаны на Perl. Иногда для скриптов используется Ruby. Это скрипты OpenShift или, например, фреймворк Metasploit. Некоторые разработчики кроссплатформенных программ используют Java. Но основные компоненты системы написаны все же на Си.

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

Зачем учить Си:

2. Библиотеки

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

Библиотеки делятся на два типа:

  • Статические - они связываются с программой на этапе компиляции, они связываются и после этого все функции библиотеки доступны в программе как родные. Такие библиотеки имеют расширение.a;
  • Динамические - такие библиотеки встречаются намного чаще, они загружены в оперативную память, и связываются с программной динамически. Когда программе нужна какая-либо библиотека, она просто вызывает ее по известному адресу в оперативной памяти. Это позволяет экономить память. Расширение этих библиотек - .so, которое походит от Shared Object.

Таким образом, для любой программы на Си нужно подключать библиотеки, и все программы используют какие-либо библиотеки. Также важно заметить, на каком языке бы вы не надумали писать, в конечном итоге все будет сведено к системным библиотекам Си. Например, вы пишите программу на Python, используете стандартные возможности этого языка, а сам интерпретатор уже является программой на Си/С++, которая использует системные библиотеки для доступа к основным возможностям. Поэтому важно понимать как работают программы на Си. Конечно, есть языки, вроде Go, которые сразу переводятся на ассемблер, но там используются принципы те же, что и здесь. К тому же системное программирование linux, в основном, это Си или С++.

3. Процесс сборки программы

Перед тем как мы перейдем к практике и создадим свою первую программу, нужно разобрать как происходит процесс сборки, из каких этапов он состоит.

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

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

Далее к работе приступает компоновщик. Его задача связать объектный модуль со статическими библиотеками и другими объектными модулями. Для каждого исходного файла создается отдельный объектный модуль. Только теперь программа может быть запущена.

А теперь, давайте рассмотрим весь єтот процесс на практике с использованием компилятора GCC.

4. Как собрать программу

Для сборки программ в Linux используется два типа компиляторов, это . Пока что GCC более распространен, поэтому рассматривать мы будем именно его. Обычно, программа уже установлена в вашей системе, если же нет, вы можете выполнить для установки в Ubuntu:

sudo apt install gcc

Перед тем как мы перейдем к написанию и сборке программы, давайте рассмотрим синтаксис и опции компилятора:

$ gcc опции исходный_файл_1.с -o готовый_файл

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

  • -o - записать результат в файл для вывода;
  • -c - создать объектный файл;
  • -x - указать тип файла;
  • -l - загрузить статическую библиотеку.

Собственно, это все самое основное, что нам понадобится. Теперь создадим нашу первую программу. Она будет выводить строку текста на экран и чтобы было интереснее, считать квадратный корень из числа 9. Вот исходный код:

include
#include

int main(){
printf("сайт\n");
printf("Корень: %f\n", sqrt(9));
return 0;
}

gcc -c program.c -o program.o

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

gcc -lm program.o -o program

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

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

Это две библиотеки загрузчика, стандартная libc и libm, которую мы подключили.

5. Автоматизация сборки

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

цель: зависимости
команда

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

program: program.o
gcc -lm program.o -o program

program.o: program.c
gcc -c program.c -o program.o

Затем вам достаточно выполнить команду make для запуска компиляции, только не забудьте удалить предыдущие временные файлы и собранную программу:

Программа снова готова и вы можете ее запустить.

Выводы

Создание программ Linux очень интересно и увлекательно. Вы сами убедитесь в этом, когда немного освоитесь в этом деле. Сложно охватить все в такой небольшой статье, но мы рассмотрели самые основы и они должны дать вам базу. В этой статье мы рассмотрели основы программирования в linux, если у вас остались вопросы, спрашивайте в комментариях!

Курс программирования на Си под Linux:

Шаг 1 - Компиляция программ на языке C/C++ Шаг 2 - Отладочная информация Шаг 3 - Компиляция нескольких файлов Шаг 4 - Библиотеки объектных файлов

Шаг 5 - Создание статической библиотеки Шаг 6 - Создание динамической библиотеки

Шаг 7 - Использование динамических библиотек Шаг 8 - Функции работы с динамическими библиотеками Шаг 9 - Инициализация динамических библиотек

Шаг 10 - Передача опций в программу - getopt

Шаг 11 - Передача длинных опций в программу - getopt_long Шаг 12 - Вывод сообщений об ошибках программы Шаг 13 - Получение информации о пользователе

Шаг 14 - Получение данных из shadow password

Шаг 15 - Работа с паролями системы с помощью функции crypt() Шаг 16 - Получение информации о группах пользователей

Шаг 1 - Компиляция программ на языке C/C++

Компилятор превращает код программы на "человеческом" языке в объектный код понятный компьютеру. Компиляторов под Linux существует много, практически для каждого распространенного языка. Большинство самых востребованных компиляторов входит в наборGNU Compiler Collection , известных под названиемGCC

(http://gcc.gnu.org/ ).

Изначально аббревиатура GCC имела смыслGNU C Compiler , но в апреле 1999 года сообществоGNU решило взять на себя более сложную миссию и начать создание компиляторов для новых языков с новыми методами оптимизации, поддержкой новых платформ, улучшенных runtime -библиотек и других изменений (http://gcc.gnu.org/gccmission.html ). Поэтому сегодня коллекция содержит в себе компиляторы для языковC ,C++ ,

Objective C ,Chill ,Fortran ,Ada иJava , как библиотеки для этих языков (libstdc++ ,libgcj , ...).

Компиляция программ производится командой:

gcc <имя_файла>

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

Для примера давайте напишем маленькую простейшую программку:

#include

int main(){ printf("\n"); printf("Our first program for Linux.\n"); return 0;

И запустим ее:

Шаг 2 - Отладочная информация

Любой компилятор по умолчанию снабжает объектный файл отладочной информацией. Компилятор gcc также снабжает файл такой информацией и на результат вы можете посмотреть сами. При компиляции проекта изпредыдущего шага у нас появился файлa.out размером11817 байт (возможно у вас он может быть другого размера).

Вся эта отладочная информация предназначается для отладки программы отладчиком GNU Debugger . Запустить его вы можете командой:

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

Компилятор gcc может создавать отладочную информацию в различных объемах и форматах, контролировать которые можно специальными ключами. Посмотреть их подробное описание можно командойman gcc :

Debugging Options

A -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name -print-prog-name=program

Ключ -g создает отладочню информацию в родном для операционной системы виде, он выбирает между несколькими форматами:stabs ,COFF ,XCOFF илиDWARF . На многих системах данный ключ позволяет использовать специальную информацию, которую умеет использовать только отладчикgdb . Другие ключи позволяют более тонко контролировать процесс встраивания отладочной информации.

Ключ -ggdb включает в исполняемый файл отладочную информацию в родном для ОС виде и дополняет ее специализированной информацией для отладчикаgdb .

Ключ -gstabs создает отладочную информацию в форматеstabs без дополнительных расширенийgdb . Данный формат используется отладчикомDBX на большинствеBSD систем. Ключ -gstabs+ дополняет отладочную информацию расширенниями понятными отладчикуgdb .

Ключ -gcoff создает отладочную информацию в форматеCOFF , которая используется отладчикомSDB на большинстве системSystem V до версииSystem V R4 .

Ключ -gxcoff снабжает файл информацией в форматеXCOFF , который используется отладчикомDBX на системахIBM RS/6000 . Использование -gxcoff+ влкючает использование дополнительной информации дляgdb .

Ключ -gdwarf добавляет инфомацию в форматеDWARF приняотм в системеSystem V Release 4 . Соответственно ключ -gdwarf+ прибавляет возможностей отладчикуgdb .

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

Увеличит уровень отладки до 3 , по умолчанию он равен2 . При первом уровне отладки компилятор включает в файл минимальное количество отладочной информации достаточное для отладки частей программы, которые вы не планировли отлаживать. В эту информацию входит описание функций и внешних переменных, но не включается информация об локальных переменных и номерах строк исходного текста. Второй уровень - это уровень по умолчанию, включает в файл большинство нужной отладочной информации. Третий уровень позволяет добавить экстра-информацию, такую как определения присутствующих в программе макросов.

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

Отладочная информация это конечно хорошо, но она может значительно увеличить объем вашего файла (в тричетыре раза). Для создания программ "релизов" существует отдельная программа, позволяющая удалить отладочную информацию из запускаемого файла. Называется эта программа strip . Для того, чтобы полностью очистить файл от отладочной информации, требуется вызвать ее с ключом -s :

После обработки файла этой командой его размер уменьшился практически в три раза и стал 3156 байт. По сравнению с 11 Кб до этого это очень даже хорошо.

Шаг 3 - Компиляция нескольких файлов

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

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

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

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

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

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

#include

// описываем функцию f1() как внешнюю extern int f1();

// описываем функцию f2() как внешнюю extern int f2();

printf("f1() = %d\n",n1); printf("f2() = %d\n",n2);

Теперь создаем два файла, каждый из которых будет содержать полное определение внешней функции из главной программы. Файлы назовем f1.c иf2.c :

// файл f1.c int f1()

// файл f2.c int f2()

После этого процесс компиляции программы с помощью gcc будет выглядеть несколько иначе от описанного в"Шаг 1 - Компиляция программ на языке C/C++" .

Компилировать можно все файлы одновременно одной командой, перечисляя составные файлы через пробел после ключа -c :

gcc -c main.c f1.c f2.c

Или каждый файл в отдельности: gcc -c f1.c

gcc -c f2.c gcc -c main.c

В результате работы компилятора мы получим три отдельных объектных файла: main.o

Чтобы их собрать в один файл с помощью gcc надо использовать ключ -o , при этом линкер соберет все файлы в один:

gcc main.o f1.o f2.o -o rezult

В результате вызова полученной программы rezult командой:

На экране появится результат работы: dron:~# ./rezult

f1() = 2 f2() = 10 dron:~#

Теперь, если мы изменим какую-то из процедур, напримерf1() :int f1()

То компилировать заново все файлы не придется, а понадобится лишь скомпилировать измененный файл и собрать результирующий файл из кусков:

dron:~# gcc -c f1.c

dron:~# gcc main.o f1.o f2.o -o rezult2 dron:~# ./rezult2

f1() = 25 f2() = 10 dron:~#

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

Шаг 4 - Библиотеки объектных файлов

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

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

Объектные библиотеки по способу использования разделяются на два вида:

Статические библиотеки

Динамические библиотеки

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

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

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