Софт-Портал

программирование на Linux

Рейтинг: 4.1/5.0 (660 проголосовавших)

Категория: Linux

Описание

Программирование на C в Linux - Николай Секунов

Программирование на C++ в Linux - Николай Секунов


Название. Программирование на 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 Ресурсы Интернета
Предметный указатель


Бесплатно скачать электронную книгу в удобном формате и читать:

программирование на linux:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    Электронные книги по теме Программирование под Linux

    Тематический CD/DVD. Электронные книги по теме Программирование под Linux .

    Наименование, Автор. Краткая аннотация.

    Наименование. " Linux: программирование в примерах .".
    Автор. "Арнольд Роббинс "

    Краткая аннотация :
    В книге рассмотрены вопросы, связанные с програмированием под Linux: файловый ввод/вывод, метаданьге файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется програмированием под Linux.
    Журнал "Системный администратор", №6(31) июнь 2005 г.
    ". это одно из лучших изданий, посвященных программированию на С под Linux из появившихся за последнее время." Из эпиграфа к книге: «Одним из лучших способов научиться программированию является чтение хорошо написанных программ». Именно этому совету и последовал автор. Все рассматриваемые темы сопровождаются изучением конкретных примеров, большинство из которых являются исходным кодом канонической версии UNIX v7. Среди подробно рассмотренных тем: аргументы, опции и переменные окружения. Управление памятью на уровне пользователя, файлы и файловый ввод/вывод. Каталоги и служебные данные файлов, общие библиотечные интерфейсы. Среди более сложных тем: управление процессами и каналы, сигналы, интернационализация и локализация, расширенные интерфейсы. Отдельная глава книги посвящена отладке приложений. Весь материал основан на личном опыте автора, полученном более чем за 15 лет программирования, а «житейские» советы, которыми он делится, приходятся всегда кстати. На мой взгляд, это одно из лучших изданий, посвященных программированию на С под Linux из появившихся за последнее время.


    Имя Файла. linux_programmirovanie.djvu.
    Год издания. 2005.
    Страниц. 656.
    Размер файла. 19.9 мб.
    Дата поступления. 31.05.2008 года, код документа. 7777777 .

    Наименование. "Unix/Linux: теория и практика программирования .".
    Автор. "Брюс Моли "

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


    Имя Файла. unix_linux_prog.djvu.
    Год издания. 2005.
    Страниц. 576.
    Размер файла. 21.3 мб.
    Дата поступления. 15.06.2008 года, код документа. 7777777 .

    Наименование. " Разработка приложений в среде Linux. Программирование для Linux .".
    Автор. "Майкл К. Джонсон, Эрик В. Троан "

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


    Имя Файла. develop_app_linux.
    Год издания. 2008.
    Страниц. 544.
    Размер файла. 12.3 мб.
    Дата поступления. 19.07.2008 года, код документа. 7777777 .

    Наименование. " UNIX для программистов и пользователей .".
    Автор. " Гласс Г. Эйблс К. "

    Краткая аннотация :
    Приводятся общие сведения о развитии UNIX. Рассматриваются утилиты, команды, системные вызовы и библиотечные функции для различных категорий пользователей. Описываются командные интерпретаторы Bourne shell, Korn shell, C shell и Bourne Again shell.
    Обсуждаются проблемы организации сети и использования Интернета. Подробно рассматриваются организация файловой системы, управление вызовами, ввод/вывод и взаимодействие процессов. Обсуждаются вопросы системного администрирования.
    Особое внимание уделено средствам программирования на языке C и системному программированию.


    Имя Файла. unix_dla_progr.djvu.
    Год издания. 2005.
    Страниц. 848.
    Размер файла. 17.6 мб.
    Дата поступления. 05.06.2008 года, код документа. 7777777 .

    Наименование. "Программирование боевого софта под Linux .".
    Автор. "Скляров И. "

    Краткая аннотация :
    Книга уникальна не только шириной охвата, но и глубиной изложения. Рассматривается программирование с использованием библиотек libpcap и libnet с поддержкой протоколов SSL, SSH и прокси-серверов, многопоточные утилиты и утилиты на неблокируемых сокетах. Имеются уникальные материалы, посвященные вопросам программирования модулей ядра Linux версии 2.6.x и пакетного фильтра BPF. Приведено программирование таких системных утилит, как traceroute и ping. Дано введение в сетевое программирование с информацией, которой не часто уделяется внимание в стандартных учебниках. Чтобы получить удовольствие от книги, необходимы определенные начальные знания, где и как их получить - рассказано в книге. Все программы для книги созданы под операционную систему Linux на языке Си, а некоторые с добавлением ассемблера. Материал может также использоваться для углубленного изучения программирования и сетевой компьютерной безопасности.


    Имя Файла. linux_war_soft.rar.
    Год издания. 2007.
    Страниц. 416.
    Размер файла. 84 мб.
    Дата поступления. 29.09.2009 года, код документа. 7777777 .

    Наименование. "Искусство программирования для UNIX .".
    Автор. "Эрик Стивен Реймонд "

    Краткая аннотация :
    Книги, подобные этой, редко появляются на прилавках магазинов, поскольку за ними стоит многолетний опыт работы их авторов.
    В книге описывается хороший стиль Unix-программирования, многообразие доступных языков программирования, их преимущества и недостатки, различные IPC-методики и инструменты разработки. Автор анализирует философию Unix, культуру и основные традиции сформированного вокруг нее сообщества. В книге объясняются наилучшие практические приемы проектирования и разработки программ в Unix. Вместе с тем описанные в книге модели и принципы будут во многом полезны и Windows-разработчикам. Особо рассматриваются стили пользовательских интерфейсов Unix- программ и инструменты для их разработки. Отдельная глава посвящена описанию принципов и инструментов для создания хорошей документации.
    Книга будет полезна для широкой категории пользователей ПК и программистов.


    Имя Файла. linux_progr.djvu.
    Год издания. 2005.
    Страниц. 554.
    Размер файла. 16.8 мб.
    Дата поступления. 18.11.2009 года, код документа. 7777777 .

    Наименование. " Linux. Системное программирование .".
    Автор. " Роберт Лав"

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


    Имя Файла. linux_sist_pr.djvu.
    Год издания. 2008.
    Страниц. 416.
    Размер файла. 5.1 мб.
    Дата поступления. 18.11.2009 года, код документа. 7777777 .

    Наименование. "Основы программирования в Linux. Издание 4 .".
    Автор. " Нейл Мэттью, Ричард Стоунз"

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


    Имя Файла. osn_progr_linux.pdf.
    Год издания. 2009.
    Страниц. 883.
    Размер файла. 40 мб.
    Дата поступления. 18.11.2009 года, код документа. 7777777 .

    Примечание.
    В папке soft_service - записаны программы для работы с документами .djvu и .pdf форматов.

    Программирование под Linux - С под Linux

    Программирование под Linux - C++ Linux

    31.03.2009, 11:46 Программирование под Linux

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

    есть сессии, это когда файлы можно группировать, например пишешь модуль-часть, для неё открываешь набор нужных файлов, сохраняешь в виде сессии под именем, потом закрываешь их, открываешь другие файлы для другого модуля, сохраняешь их в виде сессии под другим именем, потом можешь переключиться на любую сессию, при этом все лишние файлы закроются, откроется только сохранённый набор, так можно иметь сессию empty, сессию all, сессию change, сессию file
    и так для каждого проекта (программы)

    удобно выпадают сбоку классы (то есть все функции и глобальные переменные), при этом можно на любую функцию перейти, сразу откроется файл, в котором она; можно выбрать перейти к определению или к объявлению, соответственно откроется либо .c файл либо .h файл, список классов как выпадает, так и обратно его можно убрать за один клик

    консоль встроена прямо в среду, то есть в ней ты обладаешь всеми возможностями консоли, она устанавливается на каталог проекта (так для каждого проекта, что открыл - туда и консоль выставляется)

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

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

    Скачать книги о программировании под Linux

    Книги о программировании под Linux

    • Оригинальное название: UNIX Network Programming: Networking APIs
    • Третье издание
    • Автор: У. Р. Стивенс, Б. Феннер, Э. М. Рудофф
    • Издательство: Питер
    • Год: 2007
    • Язык: Русский
    • Страниц: 1040
    • Формат: djvu
    • Размер: 12 Мб

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

    Скачать книгу 29 июня 2011 22:41 | Просмотров: 11030

    • Оригинальное название: Python for Unix and Linux System Administration
    • Автор: Ноа Гифт, Джереми М. Джонс
    • Издательство: Символ-Плюс
    • Год: 2009
    • Язык: Русский
    • Страниц: 512
    • Формат: djvu
    • Размер: 6 Мб

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

    Скачать книгу 27 мая 2011 19:07 | Просмотров: 9743

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

    Скачать книгу 24 мая 2011 16:54 | Просмотров: 8440

    • Оригинальное название: Linux System Programming
    • Автор: Роберт Лав
    • Издательство: Питер
    • Год: 2008
    • Язык: Русский
    • Страниц: 416
    • Формат: djvu
    • Размер: 5 Мб

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

    Скачать книгу 8 мая 2011 23:15 | Просмотров: 9469

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

    Скачать книгу 6 мая 2011 20:20 | Просмотров: 13170

    Описание книги Guide to Assembly Language Programming in Linux.
    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.

    Скачать книгу 22 апреля 2011 11:40 | Просмотров: 3864

    Описание книги 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.

    Скачать книгу 29 марта 2011 00:56 | Просмотров: 3768

    Описание книги 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.

    Скачать книгу 26 марта 2011 14:04 | Просмотров: 3168

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

    Скачать книгу 24 марта 2011 00:26 | Просмотров: 9359

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

    Скачать книгу 20 марта 2011 00:01 | Просмотров: 15738

    Программирование в Linux для чайников

    Новые информационные технологии

    В Linux есть превосходная среда разработки прикладных программ Gambas.

    Немного о среде программирования 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

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

    Изучение C в Linux

    Изучение C++ в Linux. Первые попытки.

    Давно хотел начать изучать C++, раньше была даже жутко толстая и непонятная книга по С++. Сейчас высвободилось время из-за болезни для этого дела, и я решил изучать его. Платформа у меня Linux, операционная система Ubuntu 10.10. Одно радует, C++ кроссплатформенный язык, и многие вещи можно делать как в Windows так и в Linux.

    Прежде чем начать писать простейший скрипт надо проверить наличие библиотек и компиляторов, в данном случае нам понадобятся c++, gcc (g++). Для установки gcc наберите в терминале.

    Редактор для C++ можно использовать для начала обычный gedit, geany, eclipse с установленным С++ development .

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

    Это самый простой вариант кода, показывающий несколько методов вывода текста на экран. printf() и cout << "Русский текст" << endl;

    Для функции printf() требует подгруженной библиотеки stdio.h, а для "cout" требуется "iostream" и "using namespace std;". У некоторых может возникнуть вопрос, почему "iostream" указывается без ".h" (iostream.h)? Раньше действительно был "iostream.h", но это уже устаревшая библиотека и большенство компиляторов такое определение считают устаревшим.

    iostream — заголовочный файл с классами, функциями и переменными для организации ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++. Название образовано от Input/Output Stream («поток ввода-вывода»).

    Главная функция нашего проекта int main(), является обязательной, и должна возвращать 0 (return 0), это необходимо для того что бы передать информацию операционной системе, о том что программа успешно выполнена.

    Вот у нас есть простейший код, сохраняем его в фаил 1.cpp, далее открываем терминал и переходим в папку куда сохранен наш код, далее компилируем его:

    где "prog" имя файла

    запускаем в консоле:

    Немного про компилятор. Если вы используете команду gcc, то автоматически он пытается компилировать его в C. Для использования C++ надо испольовать с++ 1.cpp или g++ 1.cpp

    Программирование для Linux

    Daniel P. Bovet, Marco Cesati,
    Understanding the Linux Kernel, 3rd Edition

    Многопоточность является естественным продолжением многозадачности, точно также как виртуальные машины, позволяющие запускать несколько ОС на одном компьютере, представляют собой логическое развитие концепции разделения ресурсов. В рамках неформального, но простого, определения, поток - это выполнение последовательности машинных инструкций. В многопоточном приложении одновременно работает несколько потоков. Некоторые авторы избегают термина «поток» и используют вместо него термин «нить», вероятно для того, чтобы потоки программ не путались с потоками ввода-вывода. Для обозначения последовательного выполнения цепочки инструкций мне лично больше нравится термин «поток», которым я и буду пользоваться. Надеюсь, читатели Linux Format не запутаются в контекстах и, встретив слово поток, всегда поймут, идет ли речь о потоках программы, потоках ввода вывода, или о бурных паводковых потоках.

    Прежде чем приступать к программированию потоков, следует ответить на вопрос, а нужны ли они вам. Мы уже знаем, насколько хорошо развиты в Linux средства межпроцессного взаимодействия. С помощью управления процессами в Linux можно решить многие задачи, которые в других ОС решаются только с помощью потоков. Потоки часто становятся источниками программных ошибок особого рода. Эти ошибки возникают при использовании потоками разделяемых ресурсов системы (например, общего адресного пространства) и являются частным случаем более широкого класса ошибок – ошибок синхронизации. Если задача разделена между независимыми процессами, то доступом к их общим ресурсам управляет операционная система, и вероятность ошибок из-за конфликтов доступа снижается. Впрочем, разделение задачи между несколькими независимыми процессами само по себе не защитит вас от других разновидностей ошибок синхронизации. В пользу потоков можно указать то, что накладные расходы на создание нового потока в многопоточном приложении ниже, чем накладные расходы на создание нового самостоятельного процесса. Уровень контроля над потоками в многопоточном приложении выше, чем уровень контроля приложения над дочерними процессами. Кроме того, многопоточные программы не склонны оставлять за собой вереницы зомби или «осиротевших» независимых процессов.

    Первая подсистема потоков в Linux появилась около 1996 года и называлась, без лишних затей, – LinuxThreads. Рудимент этой подсистемы, который вы найдете в любой современной системе Linux, – файл /usr/include/pthread.h, указывает год релиза – 1996 и имя разработчика – Ксавье Лерой (Xavier Leroy). Библиотека LinuxThreads была попыткой организовать поддержку потоков в Linux в то время, когда ядро системы еще не предоставляло никаких специальных механизмов для работы с потоками. Позднее разработку потоков для Linux вели сразу две конкурирующие группы – NGPT и NPTL. В 2002 году группа NGPT фактически присоединилась к NPTL и теперь реализация потоков NPTL является стандартом Linux. Подсистема потоков Linux стремится соответствовать требованиям стандартов POSIX, так что новые многопоточные приложения Linux должны без проблем компилироваться на новых POSIX-совместимых системах.

    Потоки и процессы

    Тем, кто впервые познакомился с концепцией потоков, изучая программирование для Windows, модель потоков Linux покажется непривычной. В среде Microsoft Windows процесс, – это контейнер для потоков (именно этими словами о процессах говорит Джефри Рихтер в своей классической книге «Программирование приложений для Microsoft Windows»). Процесс-контейнер содержит как минимум один поток. Если потоков в процессе несколько, приложение (процесс) становится многопоточным. В мире Linux все выглядит иначе. В Linux каждый поток является процессом, и для того, чтобы создать новый поток, нужно создать новый процесс. В чем же, в таком случае, заключается преимущество многопоточности Linux перед многопроцессностью? В многопоточных приложениях Linux для создания дополнительных потоков используются процессы особого типа. Эти процессы представляют собой обычные дочерние процессы главного процесса, но они разделяют с главным процессом адресное пространство, файловые дескрипторы и обработчики сигналов. Для обозначения процессов этого типа, применяется специальный термин – легкие процессы (lightweight processes). Прилагательное «легкий» в названии процессов- потоков вполне оправдано. Поскольку этим процессам не нужно создавать собственную копию адресного пространства (и других ресурсов) своего процесса- родителя, создание нового легкого процесса требует значительно меньших затрат, чем создание полновесного дочернего процесса. Поскольку потоки Linux на самом деле представляют собой процессы, в мире Linux нельзя говорить, что один процесс содержит несколько потоков. Если вы скажете это, в вас тут же заподозрят вражеского лазутчика!

    Интересно рассмотреть механизм, с помощью которого Linux решает проблему идентификаторов процессов потоков. В Linux у каждого процесса есть идентификатор. Есть он, естественно, и у процессов-потоков. С другой стороны, спецификация POSIX 1003.1c требует, чтобы все потоки многопоточного приложения имели один идентификатор. Вызвано это требование тем, что для многих функций системы многопоточное приложение должно представляться как один процесс с одним идентификатором. Проблема единого идентификатора решается в Linux весьма элегантно. Процессы многопоточного приложения группируются в группы потоков (thread groups). Группе присваивается идентификатор, соответствующий идентификатору первого процесса многопоточного приложения. Именно этот идентификатор группы потоков используется при «общении» с многопоточным приложением. Функция getpid(2), возвращает значение идентификатора группы потока, независимо от того, из какого потока она вызвана. Функции kill() waitpid() и им подобные по умолчанию также используют идентификаторы групп потоков, а не отдельных процессов. Вам вряд ли понадобится узнавать собственный идентификатор процесса-потока, но если вы захотите это сделать, вам придется воспользоваться довольно экзотичной конструкцией. Получить идентификатор потока (thread ID) можно с помощью функции gettid(2), однако саму функцию нужно еще определить с помощью макроса _syscall. Работа с функцией gettid() выглядит примерно так:

    Более подробную информацию вы можете получить на страницах man, посвященных gettid() и _syscall. Потоки создаются функцией pthread_create(3), определенной в заголовочном файле <pthread.h>. Первый параметр этой функции представляет собой указатель на переменную типа pthread_t, которая служит идентификатором создаваемого потока. Второй параметр, указатель на переменную типа pthread_attr_t, используется для передачи атрибутов потока. Третьим параметром функции pthread_create() должен быть адрес функции потока. Эта функция играет для потока ту же роль, что функция main() – для главной программы. Четвертый параметр функции pthread_create() имеет тип void *. Этот параметр может использоваться для передачи значения, возвращаемого функцией потока. Вскоре после вызова pthread_create() функция потока будет запущена на выполнение параллельно с другими потоками программы. Таким образом, собственно, и создается новый поток. Я говорю, что новый поток запускается «вскоре» после вызова pthread_create() потому, что перед тем как запустить новую функцию потока, нужно выполнить некоторые подготовительные действия, а поток-родитель между тем продолжает выполняться. Непонимание этого факта может привести вас к ошибкам, которые трудно будет обнаружить. Если в ходе создания потока возникла ошибка, функция pthread_create() возвращает ненулевое значение, соответствующее номеру ошибки.

    Функция потока должна иметь заголовок вида:

    Имя функции, естественно, может быть любым. Аргумент arg, - это тот самый указатель, который передается в последнем параметре функции pthread_create(). Функция потока может вернуть значение, которое затем будет проанализировано заинтересованным потоком, но это не обязательно. Завершение функции потока происходит если:
    1. функция потока вызвала функцию pthread_exit(3);
    2. функция потока достигла точки выхода;
    3. поток был досрочно завершен другим потоком.

    Функция pthread_exit() представляет собой потоковый аналог функции _exit(). Аргумент функции pthread_exit(), значение типа void *, становится возвращаемым значением функции потока. Как (и кому?) функция потока может вернуть значение, если она не вызывается из программы явным образом? Для того, чтобы получить значение, возвращенное функцией потока, нужно воспользоваться функцией pthread_join(3). У этой функции два параметра. Первый параметр pthread_join(), – это идентификатор потока, второй параметр имеет тип «указатель на нетипизированный указатель». В этом параметре функция pthread_join() возвращает значение, возвращенное функцией потока. Конечно, в многопоточном приложении есть и более простые способы организовать передачу данных между потоками. Основная задача функции pthread_join() заключается, однако, в синхронизации потоков. Вызов функции pthread_join() приостанавливает выполнение вызвавшего ее потока до тех пор, пока поток, чей идентификатор передан функции в качестве аргумента, не завершит свою работу. Если в момент вызова pthread_join() ожидаемый поток уже завершился, функция вернет управление немедленно. Функцию pthread_join() можно рассматривать как эквивалент waitpid(2) для потоков. Эта функция позволяет вызвавшему ее потоку дождаться завершения работы другого потока. Попытка выполнить более одного вызова pthread_join() (из разных потоков) для одного и того же потока приведет к ошибке.

    Посмотрим, как все это работает на практике. Ниже приводится фрагмент листинга программы threads, (полный текст программы вы найдете в исходниках программы в файле threads.c).

    Рассмотрим сначала функцию thread_func(). Как вы, конечно, догадались, это и есть функция потока. Наша функция потока очень проста. В качестве аргумента ей передается указатель на переменную типа int, в которой содержится номер потока. Функция потока распечатывает этот номер несколько раз с интервалом в одну секунду и завершает свою работу. В функции main() вы видите две переменных типа pthread_t. Мы собираемся создать два потока и у каждого из них должен быть свой идентификатор. Вы также видите две переменные типа int, id1 и id2, которые используются для передачи функциям потоков их номеров. Сами потоки создаются с помощью функции pthread_create().В этом примере мы не модифицируем атрибуты потоков, поэтому во втором параметре в обоих случаях передаем NULL. Вызывая pthread_create() дважды, мы оба раза передаем в качестве третьего параметра адрес функции thread_func, в результате чего два созданных потока будут выполнять одну и ту же функцию. Функция, вызываемая из нескольких потоков одновременно, должна обладать свойством реентерабельности (этим же свойством должны обладать функции, допускающие рекурсию). Реентерабельная функция, это функция, которая может быть вызвана повторно, в то время, когда она уже вызвана (отсюда и происходит ее название). Реентерабельные функции используют локальные переменные (и локально выделенную память) в тех случаях, когда их не-реентерабельные аналоги могут воспользоваться глобальными переменными.

    Мы вызываем последовательно две функции pthread_join() для того, чтобы дождаться завершения обоих потоков. Если мы хотим дождаться завершения всех потоков, порядок вызова функций pthread_join() для разных потоков, очевидно, не имеет значения.

    Для того, чтобы скомпилировать программу threads.c, необходимо дать команду:

    Команда компиляции включает макрос _REENTERANT. Этот макрос указывает, что вместо обычных функций стандартной библиотеки к программе должны быть подключены их реентерабельные аналоги. Реентерабельный вариант библиотеки glibc написан таким образом, что вы, скорее всего, вообще не обнаружите никаких различий в работе с реентерабельными функциями по сравнению с их обычными аналогами. Мы указываем компилятору путь для поиска заголовочных файлов и путь для поиска библиотек /usr/include/nptl и /usr/lib/nptl соответственно. Наконец, мы указываем компоновщику, что программа должна быть связана с библиотекой libpthread, которая содержит все специальные функции, необходимые для работы с потоками.

    У вас, возможно, возникает вопрос, зачем мы использовали две разные переменные, id1 и id2, для передачи значений двум потокам? Почему нельзя использовать одну переменную, скажем id, для обоих потоков? Рассмотрим такой фрагмент кода:

    Конечно, в этом случае оба потока получат указатель на одну и ту же переменную, но ведь значение этой переменной нужно каждому потоку только в самом начале его работы. После того, как поток присвоит это значение своей локальной переменной loc_id, ничто не мешает нам использовать ту же переменную id для другого потока. Все это верно, но проблема заключается в том, что мы не знаем, когда первый поток начнет свою работу. То, что функция pthread_create() вернула управление, не гарантирует нам, что поток уже выполняется. Вполне может случиться так, что первый поток будет запущен уже после того, как переменной id будет присвоено значение 2. Тогда оба потока получат одно и то же значение id. Впрочем, мы можем использовать одну и ту же переменную для передачи данных функциям потока, если воспользуемся средствами синхронизации. Этим средствам будет посвящена следующая статья.

    Досрочное завершение потока

    Функции потоков можно рассматривать как вспомогательные программы, находящиеся под управлением функции main(). Точно так же, как при управлении процессами, иногда возникает необходимость досрочно завершить процесс, многопоточной программе может понадобиться досрочно завершить один из потоков. Для досрочного завершения потока можно воспользоваться функцией pthread_cancel(3). Единственным аргументом этой функции является идентификатор потока. Функция pthread_cancel() возвращает 0 в случае успеха и ненулевое значение в случае ошибки. Несмотря на то, что pthread_cancel() может завершить поток досрочно, ее нельзя назвать средством принудительного завершения потоков. Дело в том, что поток может не только самостоятельно выбрать порядок завершения в ответ на вызов pthread_cancel(), но и вовсе игнорировать этот вызов. Вызов функции pthread_cancel() следует рассматривать как запрос на выполнение досрочного завершения потока. Функция pthread_setcancelstate(3) определяет, будет ли поток реагировать на обращение к нему с помощью pthread_cancel(), или не будет. У функции pthread_setcancelstate() два параметра, параметр state типа int и параметр oldstate типа «указатель на int». В первом параметре передается новое значение, указывающее, как поток должен реагировать на запрос pthread_cancel(), а в переменную, чей адрес был передан во втором параметре, функция записывает прежнее значение. Если прежнее значение вас не интересует, во втором параметре можно передать NULL.

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

    Первый вызов pthread_setcancelstate() запрещает досрочное завершение потока, второй – разрешает. Если запрос на досрочное завершение потока поступит в тот момент, когда поток игнорирует эти запросы, выполнение запроса будет отложено до тех пор, пока функция pthread_setcancelstate() не будет вызвана с аргументом PTHREAD_CANCEL_ENABLE. Что именно произойдет дальше, зависит от более тонких настроек потока. Рассмотрим пример программы (на диске вы найдете ее в файле canceltest.c)

    В самом начале функции потока thread_func() мы запрещаем досрочное завершение потока, затем выводим четыре тестовых сообщения с интервалом в одну секунду, после чего разрешаем досрочное завершение. Далее, с помощью функции pthread_testcancel(), мы создаем точку отмены (cancellation point) потока. Если досрочное завершение потока было затребовано, в этот момент поток должен завершиться. Затем мы выводим еще одно диагностическое сообщение, которое пользователь не должен видеть, если программа сработает правильно.

    В главной функции программы мы создаем поток, затем дожидаемся, пока значение глобальной переменной i станет больше нуля (это гарантирует нам, что поток уже запретил досрочное завершение) и вызываем функцию pthread_cancel(). После этого мы переходим к ожиданию завершения потока с помощью pthread_join(). Если вы скомпилируете и запустите программу, то увидите, что поток распечатает четыре тестовых сообщения I’m still running! (после первого сообщения главная функция программы выдаст запрос на завершение потока).

    Поскольку поток завершится досрочно, последнего тестового сообщения вы не увидите. Интересна роль функции pthread_testcancel(). Как уже отмечалось, эта функция создает точку отмены потока. Зачем нужны особые точки отмены? Дело в том, что даже если досрочное завершение разрешено, поток, получивший запрос на досрочное завершение, может завершить работу не сразу. Если поток находится в режиме отложенного досрочного завершения (именно этот режим установлен по умолчанию), он выполнит запрос на досрочное завершение, только достигнув одной из точек отмены. В соответствии со стандартом POSIX, точками отмены являются вызовы многих «обычных» функций, например open(), pause() и write(). Про функцию printf() в документации сказано, что она может быть точкой отмены, но в Linux при попытке остановиться на printf() происходит нечто странное – поток завершается, но pthread_join() не возвращает управления. Поэтому мы создаем явную точку отмены с помощью вызова pthread_testcancel().

    Впрочем, мы можем выполнить досрочное завершение потока, не дожидаясь точек останова. Для этого необходимо перевести поток в режим немедленного завершения, что делается с помощью вызова pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); В этом случае беспокоиться о точках останова уже не нужно. Вызов pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); снова переводит поток в режим отложенного досрочного завершения.

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

    Литература:

    D. P. Bovet, M. Cesati, Understanding the Linux Kernel, 3rd Edition, O'Reilly, 2005