- Saved searches
- Use saved searches to filter your results more quickly
- vpetrigo/basic-linux
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Язык программирования линукс самообучение
- 1.2. Условные обозначения
- 1.3. Что нужно иметь
- 1.4. Обратная связь
- Linux. Системное программирование.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Basic Linux programming principles course / Основы программирования для Linux
vpetrigo/basic-linux
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Basic Linux programming principles course
In this repo you can find solutions for the most tasks from Linux programming course on Stepic.
- Week 1: Introduction (Linux toolchain, program linking, shared libraries)
- Week 2: Files and filesystem (ProcFS, hard- and symlinks, working with directories)
- Week 3: Processes and threads (fork()/exec() calls, clone(), daemons)
- all tasks are under folder
- Week 4: IPC (pipes, shared memory, signals, I/O multiplexing)
- all tasks are under folder
- Week 5: Network communication (TCP/UDP)
- all tasks are under folder
Do not use it if you do not solve them yourself as you won’t get delight, pleasure and satisfaction of passing that great course.
In case you have a question feel free to ask by using Issues.
Основы программирования для Linux
В данном репозитории собраны решения большинства задач из курса Основы программирования для Linux на Stepic.
- Неделя 1: Введение (Linux toolchain, program linking, shared libraries)
- Неделя 2: Файлы и файловая система (ProcFS, hard- and symlinks, working with directories)
- Неделя 3: Процессы и потоки (fork()/exec() calls, clone(), daemons)
- all tasks are under folder
- Неделя 4: IPC (pipes, shared memory, signals, I/O multiplexing)
- all tasks are under folder
- Неделя 5: Сетевые возможности (TCP/UDP)
- all tasks are under folder
Не используйте приведенные решения, если сами не попытались решить поставленную задачу, так как это лишит вас всего удовольствия и наслаждения от процесса.
Если возникнут вопросы, можете задать их с помощью создания Issue-тикета.
About
Basic Linux programming principles course / Основы программирования для Linux
Язык программирования линукс самообучение
Предполагается, что читатель этой книги должен иметь хотя бы начальные пользовательские навыки при работе с GNU/Linux (умение вводить команды в оболочку и знать основы операционной системы), а также знать язык C хотя бы на начальном уровне. Я посчитал бессмысленным писать еще одну книгу по языку C. Если вы знаете язык C на уровне книги Кернигана и Ритчи «Язык программирования Си», то у вас не будет проблем с изучением материала этой книги.
Если вы знаете язык C++, но не знаете C, ничего страшного. Эти два языка хотя и разные по своей сути, но имеют одну и ту же синтаксическую основу. C++-программисту не надо обладать феноменальной сообразительностью, чтобы разобраться в программе, написанной на C.
Большая часть материала этой книги относится и к другим современным Unix-подобным операционным системам (FreeBSD, например). Если вы еще не знаете Linux, то больших проблем не будет.
1.2. Условные обозначения
В книге используется достаточно мало условных обозначений. Листинги программ, а также вырезки из листингов и содержимое конфигурационных или иных файлов выделяются синим цветом:
Примеры команд, вводимых в оболочку выделяются оранжевым цветом и начинаются с символа $ (приглашение командной строки). Вывод команд выделяется жирным шрифтом:
$ gcc gcc: no input files $
Примеры команд, вводимых от имени суперпользователя (root) выделяются так же, как и обычные команды, только в качестве приглашения командной строки используется символ #
# lilo -t Added Linux * Added BootFromCD The boot sector and the map file have *NOT* been altered. #
Некоторые вещи в основном тексте, на которые я хотел бы обратить ваше внимание, будут выделяться жирным шрифтом. Некоторые термины, которые следует запомнить, будут выделяться курсивом. Кроме того, жирным шрифтом могут быть отделены от основного текста имена файлов, имена функций и т. п.
1.3. Что нужно иметь
То, что нам нужно иметь, называют инструментарием. Инструментарий программиста зависит от того, какие программы и на каких языках он будет писать. Наш инструментарий будет состоять из: 1) Операционной системы Linux (GNU/Linux) с текстовым редактором; 2) Компилятора с линковщиком; 3) Дополнительных утилит. Ну и конечно же из терпения и усердия.
Для начала нужно иметь Linux (здесь правильнее будет сказать GNU/Linux). Подойдет практически любой современный дистрибутив. Посмотрите, какая версия ядра Linux у вас используется. Наберите в оболочке следующую команду:
У меня ядро версии 2.6.10. У вас, скорее всего, будет что-то другое. Дистрибутивы, построенные на ядрах версий 2.4.x и 2.6.x достаточно современные для того, чтобы воспроизвести все примеры в этой книге. Версии 2.0.x и 2.2.x также могут использоваться, но некоторые возможности, описанные в этой книге в этих ядрах не реализованы.
Следующий шаг — компилятор. Мы будем использовать компилятор gcc (не обсуждается!). Практически все дистрибутивы Linux поставляются вместе с компилятором языка C. Вопросы о том, какие программы установлены, как устанавливать недостающие программы выходят за рамки этой книги. Поэтому не буду объяснять, как проверить присутствие в системе компилятора. На начальном этапе обучения версия компилятора не имеет значения. Если у вас есть компилятор gcc, то и линковщик (о том, что это такое, будет рассказано позже) тоже есть (вероятность 99%).
Многие программисты используют различные оболочки для программирования (KDevelop, Glade и прочие). Мы откажемся от этого подхода по двум причинам: 1) это претит идеологии Unix; 2) за всеми этими средами разработки стоят те самые утилиты, которые мы будем использовать непосредственно. Нам на начальном этапе потребуется лишь утилита make.
И, наконец, немаловажная деталь. Текстовый редактор. Здесь на вкус и цвет товарища нет. В мире Unix-систем есть два лагеря: любители Vi и любители Emacs. В настоящее время написано много клонов редактора Vi (Vim, Elvis, GVim) и много клонов (а точнее — расширений) редактора Emacs. И для Vi и для Emacs существуют как консольные так и графические версии. Нет смысла обсуждать преимущества и недостатки этих двух «гигантов». Вам придется самостоятельно выбрать наиболее удобный для вас текстовый редактор. Возможно вам не понравится ни один из них и вы будете использовать что-нибудь наподобие kate или nedit или pico. Между прочим, редактор Pico открывает свой третий лагерь поклонников. Этот редактор, изначально разработанный в Вашингтонском университете для почтовика pine, а затем ставший самостоятельным редактором, уверенно набирает силу в сообществе Unix. Если вы полный аскет, можете попробовать редактор ed (red), который мало напоминает текстовый редактор в современном понимании. Опять же повторюсь, выбор за вами. Я использую консольную версию редактора Vim, но с большим уважением отношусь и к Emacs. Очень важно попробовать оба редактора «в полную силу», а не просто «взглянуть». Только опытный пользователь сможет за видимой неуклюжестью ощутить мощь и удобство. Это одна из важнейших граней идеологии Unix.
Подавляющую часть работы мы будем проводить в командной строке. «Командная строка» — общий термин, подразумевающий собой сочетание терминальной программы и командной оболочки. Терминальная программа (или программа эмуляции терминала), это то, что вы видите на экране, когда работаете с командной строкой. Терминальная программа позволяет пользователю вводить команды и видеть результаты их выполнения. Программа konsole в KDE, например, является терминальной программой. Под терминальной программой запускается командная оболочка (командный интерпретатор или просто shell). Командная оболочка через интерфейс терминальной программы общается с пользователем и выполняет всю основную работу. Bash, Csh, Ksh — это все командные оболочки или, как их еще называют, командные интерпретаторы. В Linux я рекомендую использовать оболочку Bash (Bourne Again SHell). Однако не произойдет ничего страшного, если вы будете использовать другую командную оболочку, например C-Shell (csh), у которой достаточно своих поклонников. Как вы позже узнаете, любая командная оболочка — это не просто исполнитель команд, но и полноценный интерпретатор собственного языка программирования. Чтобы узнать, какая оболочка запущена под терминальной программой, просто наберите команду ps. В одной из строк (скорее всего — в первой) будет написана ваша командная оболочка:
$ ps PID TTY TIME CMD 5003 pts/0 00:00:00 bash 6025 pts/0 00:00:00 ps $
1.4. Обратная связь
Книга распространяется на условиях GNU Free Documentation License. В соответствии с условиями этой лицензии вы можете свободно скачивать и распространять книгу без каких-либо разрешений, но не нарушая и не изменяя условий Лицензии. Если вы хотите поместить копию книги на своем Интернет-ресурсе или просто распечатать — делайте это свободно, как завещал великий Столлман!
Вы также можете вносить самостоятельные изменения в эту книгу. В этом случае я просто прошу сообщать мне об этом.
Linux. Системное программирование.
Данная книга рассказывает о системном программировании в Linux. Системное программирование — это практика написания системного ПО, низкоуровневый код которого взаимодействует непосредственно с ядром и основными системными библиотеками. Иными словами, речь далее пойдет в основном о системных вызовах Linux и низкоуровневых функциях, в частности тех, которые определены в библиотеке C. Есть немало пособий, посвященных системному программированию для UNIX-систем, но вы почти не найдете таких, которые рассматривают данную тему достаточно подробно и фокусируются именно на Linux. Еще меньше подобных книгучитывают новейшие релизы Linux и продвинутые интерфейсы, ориентированные исключительно на Linux. Эта книга не только лишена всех перечисленных недостатков, но и обладает важным достоинством: дело в том, что я написал массу кода для Linux, как для ядра, так и для системных программ, расположенных непосредственно «над ядром». На самом деле я реализовал на практике ряд системных вызовов и других функций, описанных далее. Соответственно книга содержит богатый материал, рассказывая не только о том, как должны работать системные интерфейсы, но и о том, как они действительно работают и как вы сможете использовать их с максимальной эффективностью. Таким образом, данная книга одновременно является и руководством по системному программированию для Linux, и справочным пособием, описывающим системные вызовы Linux, и подробным повествованием о том, как создавать более интеллектуальный и быстрый код. Текст написан простым, доступным языком. Независимо от того, является ли создание системного кода вашей основной работой, эта книга научит полезным приемам, которые помогут вам стать по-настоящему высокопрофессиональным программистом.