Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Ключи к здоровью" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Декабрь 2003 → | ||||||
1
|
2
|
3
|
4
|
5
|
6
|
7
|
---|---|---|---|---|---|---|
9
|
10
|
11
|
12
|
13
|
14
|
|
16
|
17
|
19
|
20
|
21
|
||
22
|
23
|
24
|
25
|
26
|
27
|
28
|
30
|
31
|
Автор
Статистика
4.317 подписчиков
-2 за неделю
-2 за неделю
Программирование в Linux с нуля - Выпуск 2
Информационный Канал Subscribe.Ru |
Программирование в Linux с нуля. Выпуск 2. |
Автор: Nikolay N. Ivanov |
LinuxProgrammer Site |
1. Авторское предисловие
Здравствуйте уважаемые подписчики. Это второй выпуск рассылки, в котором мы непосредственно приступим к программированию и обсужденю наболевших тем. Тем, кто недавно подписался и не видел предыдущего выпуска, советую ознакомиться с разделом 2 "Информация для подписавшихся".На этой неделе занялся созданием сайта "LinuxProgrammer Site". Я собираюсь сделать его с минимальным количеством наворотов (просто и удобно). Хотелось бы узнать ваше мнение по этому поводу. Во-вторых мне в дальнейшем понадобится помощь: сайт проверяется только на следующих браузерах:
1) Konqueror
2) Mozilla
3) Nautilus
4) Opera for Linux
5) Netscape for Linux
Я не имею возможности (и не хочу иметь такую возможность) тестировать сайт на MSIE, однако игнорировать таких посетителей нельзя. Если у кого-нибудь есть возможность выполнить такую проверку - дайте пожалуйста знать.
2. Информация для подписавшихся
В
этом разделе содержится информация о рассылке, которую необходимо
прочитать всем свежеподписавшимся.
Меня зовут Николай. Я программист, занимающийся разработкой приложений для ОС Linux, а также модификацией ее ядра. Живу и работаю в Великом Новгороде. Женат. Если вам интересно что-то, что касается непосредственно моей личности, пишите.
Рассылка предназначена практически для всех групп программистов в Linux (в том числе и для кандидатов в программисты). Единственное, чего я не буду касаться - это кроссплатформенные приложения Linux+Windows. Я не противник Windows, просто я не использую эту операционную систему уже лет пять. Узнав все хитрости Linux, пропал смысл использовать Windows. Извините, но я не знаю ничего, что связано с Windows.
Рассылка сопровождается публикацией сайта "LinuxProgrammer Site", который в настоящее время находится на стадии разработки. На нем вы сможете найти много полезного.
Ниже представлены разделы, которые будут выходить в рассылке. Если вам что-то не нравится, пишите, я постараюсь учесть все предложения.
1. Авторское предисловие:
Здесь я буду рассказывать о новостях, связанных с рассылкой, отвечать на вопросы подписчиков и т. д.
2. Информация для подписавшихся:
Здесь будет процитирован настоящий текст, который поможет новым подписчикам быстро влиться в коллектив.
3. Программирование в Linux:
Здесь я буду писать учебный материал собственного изложения. Особенная ценность этого раздела состоит в том, что такой информации (в полном и доступном изложении) нигде нет! Все это - результаты моих бесчисленных опытов. К счастью вам не придется повторять все то, на чем я обжигался.
4. Вопросы и ответы:
Это форум, в котором кто-то задает вопросы, а кто-то на них отвечает. Чтобы прислать вопрос в данную рубрику необходимо написать мне письмо, указав в качестве темы “Question_Linuxp”. Вопрос будет опубликован в ближайшем выпуске. Чтобы прислать ответ на вопрос, следует написать мне письмо с ответом, составив тему следующим образом:
Меня зовут Николай. Я программист, занимающийся разработкой приложений для ОС Linux, а также модификацией ее ядра. Живу и работаю в Великом Новгороде. Женат. Если вам интересно что-то, что касается непосредственно моей личности, пишите.
Рассылка предназначена практически для всех групп программистов в Linux (в том числе и для кандидатов в программисты). Единственное, чего я не буду касаться - это кроссплатформенные приложения Linux+Windows. Я не противник Windows, просто я не использую эту операционную систему уже лет пять. Узнав все хитрости Linux, пропал смысл использовать Windows. Извините, но я не знаю ничего, что связано с Windows.
Рассылка сопровождается публикацией сайта "LinuxProgrammer Site", который в настоящее время находится на стадии разработки. На нем вы сможете найти много полезного.
Ниже представлены разделы, которые будут выходить в рассылке. Если вам что-то не нравится, пишите, я постараюсь учесть все предложения.
1. Авторское предисловие:
Здесь я буду рассказывать о новостях, связанных с рассылкой, отвечать на вопросы подписчиков и т. д.
2. Информация для подписавшихся:
Здесь будет процитирован настоящий текст, который поможет новым подписчикам быстро влиться в коллектив.
3. Программирование в Linux:
Здесь я буду писать учебный материал собственного изложения. Особенная ценность этого раздела состоит в том, что такой информации (в полном и доступном изложении) нигде нет! Все это - результаты моих бесчисленных опытов. К счастью вам не придется повторять все то, на чем я обжигался.
4. Вопросы и ответы:
Это форум, в котором кто-то задает вопросы, а кто-то на них отвечает. Чтобы прислать вопрос в данную рубрику необходимо написать мне письмо, указав в качестве темы “Question_Linuxp”. Вопрос будет опубликован в ближайшем выпуске. Чтобы прислать ответ на вопрос, следует написать мне письмо с ответом, составив тему следующим образом:
-
Answer_Linuxp_номер_выпуск
номер – это номер вопроса, опубликованного в выпуске под номером выпуск
Все материалы из рубрики "Вопросы и ответы" автоматически попадают в раздел "FAQ" сайта "LinuxProgrammer Site". Если вы по какой-нибудь причине не желаете, чтобы ваш вопрос или ответ был опубликован на сайте, укажите об этом в письме. То же самое касается публикации вашего адреса.
Рассылка только начинает работать и поэтому в ней много недоделок. До сих пор не сконструирован сайт. Надеюсь, что ваши пожелания помогут сделать ее лучше.
Все материалы, находящиеся на страницах рассылки вы можете цитировать и распространять полностью или частично без уведомления или разрешения с моей стороны.
3. Программирование в Linux
Итак, сегодня мы начинаем долгий и увлекательный путь к профессиональному программированию. Так как целью является не специализация, а именно профессионализм, то вам придется выработать в себе следующие качества:1) Дотошность
Профессиональный программист ничто не воспринимает на веру. Все надо проверять, даже если это в какой-то ситуации кажется лишним.
2) Последовательность
Профессиональный программист четко знает, что ему нужно иметь, что нужно сделать и что в итоге должно получиться.
3) Умение ошибаться
Как вы потом поймете, одна задача имеет одно и только одно правильное решение. Профессиональный программист умеет вовремя остановиться и начать все заново.
3.1. Необходимые знания
Я предполагаю, что вы хотя бы немного знаете язык C или C++. Те, кто не знает - не беда. Тот уровень знаний, который я жду от вас можно обрести примерно за 3 недели изучения языка C или C++. Чтобы исключить непонимание, я буду все "прожевывать" до малейших деталей. Также необходимы элементарные знания ОС Linux (далее под ОС Linux будем понимать GNU/Linux): умение выполнять простейшие операции в командной оболочке, знание основ файловой системы Linux (наиболее важные каталоги, точки монтирования, права доступа к файлами). Как видите, ничего сверхестественного от вас не требуется. Если вы не знаете ничего из вышеперечисленного - пишите, и я вышлю вам самые лучшие учебные материалы, благодаря которым в сжатые сроки (около месяца, в зависимости от интенсивности) можно овладеть требуемыми знаниями.
3.2. Регламент обучения
Да простят меня гуру программирования, но я буду все детально прожевывать. Однако чтобы гуру не скучали, для них будет масса сносок "Не для чайников". На своем опыте знаю, что излишняя загрузка информацией приводит к непониманию. Цель данного обучения - не показать, а научить профессиональному программированию. Поэтому особенно сложные места будут повторяться. Поверьте мне, так будет лучше.
Обучение будет состоять не только из теории. Я постараюсь насочинять как можно больше практических примеров. В каждом номере будет "домашнее задание", которое необходимо выполнять. Решения мне присылать не нужно, за исключением, конечто же случаев возникновения вопросов. В каждом последующем выпуске рассылке будет публиковаться разбор домашнего задания. Помимо этого я очень надеюсь, что вы будете переписывать вручную (а лучше по память) примеры, которые будут приводиться. Даже хорошо понятая идея легко улетучивается, если ее не попробовать на практике определенное число раз.
Что касается программ, закрепляющих материал, то они не будут "Hello World!"-ами. Я буду стараться давать примеры программ, имеющих хоть какую-нибудь практическую ценность.
Если обучение будет проходить в запланированном порядке, то через два года вы получите:
1) Профессиональное знание языков C и C++ применительно к Linux.
2) Умение писать драйверы устройств для Linux.
3) Понимание работы ядра Linux и умение его модернизировать.
4) Умения создавать профессиональные прикладные GUI-приложения.
5) Знания различных синтаксисов ассемблера, используемых в Linux.
6) Умение восстанавливать файловую систему "вручную".
7) Умение правильно оформлять, лицензировать и распространять программы.
8) Улучшите свои познания в области фундаментальных алгоритмов.
9) Знание дополнительных языков, таких как awk.
10) Научитесь создавать сетевые приложения на базе Linux.
11) Научитесь автоматизировать процесс разработки ПО в Linux.
Но чтобы все это знать, надо трудиться, не много, но постоянно.
3.3. Инструментарий
Инструментарием будем называть набор средств (программных, технических, информационных и т. д.), посредством которых будет протекать разработка программы. Итак, в ближайшее время нам понадобится следующий инструментарий:
1) ОС Linux
2) Текстовый редактор
3) GNU-компиляторы gcc и g++
4) GNU-утилита make
5) Стандартные библиотеки языков C и C++
Если вы имеете на руках готовый дистрибутив ОС Linux, то там все это уже есть. Версии указанных прогамм пока что не имеют значения. В дальнейшем инструментарий будет расширяться, о чем я буду заведомо сообщать.
1) Листинги программ будут обозначаться следующим образом:
----------------
ТЕЛО ЛИСТИНГА
----------------
Листинг 1
2) Домашние задания будут обозначаться так
----------------
ТЕКСТ ДОМАШНЕГО ЗАДАНИЯ
----------------
Домашнее задание 1
3) Замечания обозначим следующим образом:
ЗАМЕЧАНИЕ 1. ТЕКСТ ЗАМЕЧАНИЯ
4) А так будут преподноситься материалы для более опытных читателей
NFK:
5) Командная строка будет описываться так:
|$ ПРИМЕР ВВОДА В КОМАНДНУЮ СТРОКУ
| ПРИМЕР ОТВЕТА КОМАНДНОЙ СТРОКИ
3.5. Компиляторы gcc и g++
Итак, приступим к изучению. Сегодня материал будет маленьким, для затравки. Сначала прочитайте скучную теорию.
Большую часть обучения мы будем использовать компиляторы семейства GCC (GNU Compiler Collection). Это компилятор языка C (gcc) и компилятор языка C++ (g++). Есть GCC-компиляторы и других языков программирования, например, g77 (язык Фортран), но мы их в ближайшее время касаться не будем. Что же такое компилятор? Дело в том, что операционная система не понимает человеческого языка. Мало того, она не понимает ни одного из существующих языков программирования. Операционная система воспринимает команды в так называемом исполняемом коде. Исполняемый код по сути своей не сложен, однако он очень трудночитаемый. Эта трудночитаемость исполняемого кода обусловлена строгостью изложения и заменой всех имен на адреса и позиции. Также исполняемый код разбивает все команды на элементарные подкоманды. Модифицировать программу, написанную в исполняемом коде вручную бессмысленно, поскольку в них предполагается, что каждая команда должна находится на своей позиции, а любая модификация (кроме равнозначной замены) в такой программе немедленно приведет к сбою позиции. Однако в силу того, что вы собираетесь стать профессионалами, в дальнейшем вам придется научиться немного ориентироваться в исполняемом коде.
Чтобы не писать программы в машинном коде используют компиляторы. Каждый компилятор привязан к определенному языку программирования. Грубо говоря, задача компилятора - перевести понятную человеку и легко модернизируемую программу на языке программирования в так называемый объектный код. Возникает вопрос, что такое объектный код? Объектный код - это программа, переведенная с языка программирования в исполняемый код без преобразования определенных имен в адреса и позиции. Для чего же это нужно? Дело в том, что очень часто одна программа разбивается на модули и пишется отдельно на одном и том же или на разных языках программирования. Такое разбиение выгодно по двум причинам:
1) Небольшое изменение програмы потребует перекомпиляции только измененного модуля, а не всей программы.
2) Каждый язык обладает своими достоинствами. Использование достоинств разных языков в одной программе - очень выгодный ход со стороны профессионального программиста.
Итак, в каждом модуле сохранились какие-то определенные имена, которые играют роль сцепительных механизмов при сборке программы. Сборкой (или линковкой) программы называют объединение объектных модулей программы в один или несколько исполняемых модулей. Сборка осуществляется при помощи специальной программы-линковщика (сборщика).
Компиляторы семейства GCC разработаны с целью максимально облегчить жизнь программисту. Эти компиляторы имеют богатый спектр настроек, благодяря которым можно, например, заставить компилятор при определенных параметрах настройки автоматически вызывать линковщик, чем мы и воспользуемся. В ОС Linux стандартный линковщик вызывается командой ld. Но за нас это будет делать компилятор.
----------------
Попробуйте узнать, что такое GNU. Определите также взаимосвязь между GNU и Linux. Узнайте, что такое интерпретация программы.
----------------
Домашнее задание 1
3.6. Вместо "Hello World!"
Итак, рассмотрим нашу первую программу. Эта программа выводит на экран квадрат числа.
----------------
// sqr.cpp - SQR program
#include <iostream>
#include <cstdlib>
using namespace std;
int main (int argc, char** argv)
{
if (argc != 2) {
cerr << "Wrong argument.\n";
return 1;
}
int a = atoi (argv[1]);
cout << a*a << '\n';
return 0;
}
----------------
Листинг 1 - sqr.cpp
Чтобы превратить программу SQR, написанную на языке C++ в исполняемый код, мы можем пойти двумя дорогами:
1)
|$ g++ -o sqr sqr.cpp
2)
|$ g++ -c sqr.cpp
|$ g++ -o sqr sqr.o
В первом случае компилятор компилирует файл sqr.cpp и сразу же вызывает линковщик для одного объектного файла с именем sqr.o, который удаляется после линковки.
Во втором случае мы сначала создаем объектный файл, а потом линкуем его (при помощи компилятора) до исполняемого файла sqr. В обоих случаях выполняется одно и то же действие, с тем только отличием, что в первом случае объектный файл удаляется, а во втором - остается.
Чтобы запустить программу, следует выполнить следующее:
|$ ./sqr 10
| 100
или
|$ ./sqr
| Wrong argument.
Теперь домашнее задание.
----------------
Внимательно просмотрите, затем введите по памяти в текстовом редакторе Листинг 1. Откомпилируйте полученную программу и запустите. Найдите в Листинге 1 пять существенных особенностей, говорящих, что это программа на языке C++, а не на C.
----------------
Домашнее задание 2
----------------
Узнайте через команду:
|$ man gcc
какой смысл имеют опции -o и -c в компиляторах GCC.
----------------
Домашнее задание 3
NFK: С появлением gcc-3 кто-то распустил слухи, что опция -S (в сочетании с другой опцией) теперь может генерировать ассемблерный код в синтаксисе Intel. Посмотрел - нет там никакого Intel-овского ассемблера: как генерировал AT&T, так и генерирует. А мораль басни такова: доверяй, но проверяй.
----------------
Объясните, что означают первые три строки (не считая пустых строк и комментариев) исходного текста программы, представленного Листингом 1.
----------------
Домашнее задание 4
----------------
Что означают аргументы argc и argv функции main () в Листинге 1.
----------------
Домашнее задание 5
На сегодня все. Увидимся примерно через неделю. Спасибо за внимание. Раздел "Вопросы и ответы" в этот раз не вышел, потому что вопросы еще не поступали. Напоминаю, можно задать любой вопрос, касающийся ОС Linux, а подписчики постараются на него ответить. Если у подписчиков не получится, отвечу я.
До новых встреч! Nikolay.

http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||