Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

ПРОГРАММИРОВАНИЕ: ВВЕДЕНИЕ В ПРОФЕССИЮ

краудфандинговый проект

Программирование: введение в профессию. Издание 2,91 (электронное)

1st volume cover 2nd volume cover 3rd volume cover taskbook cover

Издание 2,91 (электронное, с незначительными исправлениями) опубликовано на сайте 31 июля 2025 г. Основным отличием от издания 2,9 следует считать появление кликабельной навигации и PDF-индекса в первом томе; кроме того, исправлены все обнаруженные с января опечатки и ошибки, в том числе всё, что упоминается в эррате издания 2,9.

Аннотация

Учебник «Программирование: введение в профессию» ориентирован на самостоятельное изучение и предполагает использование систем семейства Unix (в т.ч. Linux) в роли сквозной среды для обучения.

Скачать книгу

Дополнительные файлы

Архив, содержащий примеры программ, можно скачать здесь: progintro_2_91_examples.tgz. Напоминаем, что раскрыть этот архив можно командой

   tar -xzf progintro_2_91_examples.tgz

Файл stud_io.inc, используемый в начальных примерах третьей («ассемблерной») части, есть в архиве примеров, но его также можно взять здесь: stud_io_inc. Не забудьте переименовать файл! Это делается так:

  mv stud_io_inc stud_io.inc

Errata

Том I

Стр.Положение Содержание, комментарий
193-й абзац, предпоследняя строканаписано «построениии» (лишняя буква 'и')
235-й абзац, предпоследняя строканаписано «устойство», должно быть «устройство» (пропущена буква 'р')
302 строка сверхунаписано «соответствущим», должно быть «соответствующим» (пропущена буква 'ю')
39В середине страницы первый абзац после заголовка, 4 строка снизу написано «програмистских», должно быть «программистских» (пропущена буква 'м')
89предпоследний абзац, 6 строка снизу написано «соответствущее», должно быть «соответствующее» (пропущена буква 'ю')
13013 строка снизупредлог «с» перед q^ лишний, рудимент от старой версии текста
1403 абзац снизу, 8 строканаписано «пропорциональных», должно быть «пропорциональное»
14714 строка сверхунаписано «поддерерва», должно быть «поддерева» (лишняя 'р')
171предпоследний абзац, 4 строканаписано «Hewllett», должно быть «Hewlett» (лишняя 'l')
1812 строка после заголовка параграфанаписано «задающее», должно быть «задающие»
1866 строка снизунаписано «который», должно быть «которых»
206Предпоследний абзац перед заголовком, 4 строка написано «перечисленого», должно быть двойное 'н'

Том II

Стр.Положение Содержание, комментарий
32первая строка последнего абзаца написано «Примерять», должно быть «Применять»
392-й абзац снизу Допущена фактическая ошибка, в действительности модификатор для коротких целых существует; не вполне понятно, зачем он нужен и на что влияет, но он есть.
47предпоследний абзац перед началом новой главы Допущена фактическая ошибка: написано, что функция fseek возвращает новое смещение, тогда как в действительности она возвращает 0 в случае успеха и -1 в случае ошибки.
844-я строка вверх от заголовка написано «mwprintw», должно быть «mvprintw»
165абзац перед вставкой примера кода, 3 строка снизу написано «вашую», должно быть «вашу»

Том III

Стр.Положение Содержание, комментарий
312-й абзац параграфа 9.4.1, 10 строка Написано «то подсистема-клиент», должно быть «то подсистема-сервер».
1094-й абзац, 11 строка Написано «Implementation», должно быть «Interpretation».
129Пятый полный абзац сверху (шестой, если считать за абзац одну "висячую" строку) Написано (prin1 (char-code 65)) и (prin1 (char-code 10)), в обоих случаях должно быть code-char
1675 строкаНаписано when, должно быть if (согласно оригиналу)
218Первая вставка моноширинным шрифтом Допущена фактическая ошибка. Подстановка переменных в тексте команды происходит до начала исполнения всей команды, включая установку временных значений переменных, поэтому этот пример попросту не работает.

Задачник

Стр.Положение Содержание, комментарий
3117 строка снизу (в тексте задачи 2.32) написано «нравятся», должно быть «нравится»
3612 строка снизу (в тексте задачи 2.52) написано «в поток стандратного ввода», должно быть «в поток стандартного вывода»
586 строка снизу В ссылке указан номер задачи (2.26) вместо номера страницы (должно быть 30)
157В ответе к задаче 2.39 Написано p^.x, должно быть p^.t^

From L_xV profile Sat Apr 11 12:27:04 2026 UTC pencil

Не ошибка, а просьба скорее (Том 2, стр. 85)

В главе про ncurses в разъяснениях к функциям, которые управляют цветами, ничего не сказано о том, что без библиотечной start_color(), вообще-то, ничего не соизволит работать. Приведен только маленький пример, где она используется, однако мне, незнакомому с библиотекой человеку, вот вообще никак не понять, что функция не просто "пример от автора", а является частью библиотеки. Спустя пару часов перенастройки терминала и даже самого bash (почему бы и нет), я таки залез в документацию ncurses и вычитал про функцию уже там, после чего стало немного жаль потраченного времени :P

Просьба добавить ну хоть одно предложение об этой несчастной функции, просто для ясности.

parent From Andrey V. Stolyarov profile Sat Apr 11 19:24:13 2026 UTC pencil

userpic

Re: Не ошибка, а просьба скорее (Том 2, стр. 85)

Ok, пометил это к доработке.

From Ivan (unverified) Tue Apr 7 13:26:23 2026 UTC pencil

Уникальный идентификатор организации

Том II, страница 145

Например, на одном из старых компьютеров автора этих строк основная сетевая карта имела mac-адрес 00:1f:c6:65:42:48, причем первые два байта (00:1f) здесь указывают на команию-производитель (ASUS), а остальные представляют собой серийный номер устройства.

Последние три байта серийный номер*

From George (unverified) Fri Mar 20 00:07:56 2026 UTC pencil

Орфографическая ошибка в Томе II, на стр. 150

В середине предпоследнего абзаца: ведёт к потери большей части аудитории (должно быть "к потерЕ")

parent From Andrey V. Stolyarov profile Sun Apr 12 10:38:40 2026 UTC pencil

From EVI profile Wed Mar 18 08:19:12 2026 UTC pencil

Том.2, стр. 128

Вместо printf воспользуемся системным вызовом write, для чего, во-первых, опишем сообщение в виде глобальной строковой константы, и, во-вторых, снабдим обработчик действиями по сохранению и восстановлению значения errno.

А для чего всё же printf заменяется на write?

parent From Andrey V. Stolyarov profile Wed Mar 18 09:35:04 2026 UTC pencil

userpic

Re: Том.2, стр. 128

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

parent From EVI profile Wed Mar 18 10:05:02 2026 UTC pencil

Re: Re: Том.2, стр. 128

Уточняю, у меня претензия к самой формулировке предложения. У вас при чтении данного предложения ничего не дёргается?

Может у меня с русским языком хуже, чем я думаю, тогда извиняюсь что побеспокоил. :^)

parent From Andrey V. Stolyarov profile Wed Mar 18 11:26:16 2026 UTC pencil

userpic

Re: Re: Re: Том.2, стр. 128

Гм.

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

Попробую в следующем издании этот фрагмент переформулировать.

parent From EVI profile Wed Mar 18 14:03:48 2026 UTC pencil

Re: Re: Re: Re: Том.2, стр. 128

Каюсь, зря потратил ваше время.

Второй вариант, как у меня это читается как если добавить "... , для чего мы, ...". Мы ради write добавляем глобальную строковую константу, окей. А вот errno для write не устанавливается (по крайней мере в мануалах я об этом не нашёл). В openbsd man 2 write (в линуксовых манах не нашёл) указывается, что если write вернуло -1, то и errno устанавливается. Я был уверен, что для write errno не ставится.

parent From Andrey V. Stolyarov profile Wed Mar 18 17:06:56 2026 UTC pencil

userpic

Re: Re: Re: Re: Re: Том.2, стр. 128

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

И я не знаю, куда вы "в линуксовых манах" смотрите, пардон. У меня в мане всё есть.

From Бука (unverified) Mon Mar 2 04:01:01 2026 UTC pencil

Возможная опечатка

Первый том, стр. 186, последний абзац, "первый из которыЙ указывает".

parent From Andrey V. Stolyarov profile Fri Apr 10 18:02:19 2026 UTC pencil

userpic

Re: Возможная опечатка

Ни фига себе "возможная" 8-() уж не знаю, какие тут могут быть сомнения, совершенно очевидная опечатка, причём вот это вот "й/х" — это сугубо моторное явление, при печати задействуется безымянный палец не той руки (по канонам слепой печати это должен быть мизинец, но тут уж извините — лично я мизинцы использую только для Shift'ов и Ctrl'ов).

В общем спасибо :-)

From Никита profile Sat Feb 28 17:37:23 2026 UTC pencil

Ошибка в задании 2.19 в задачнике

В задаче 2.19 перечисляются числа, которые следует вывести, и в пункте e повторяется число, обозначенное в пункте a: a) целое число, равное количеству слов в только что введенной строке ...; e) три целых числа - общее количество слов во введенной строке, ...

parent From Andrey V. Stolyarov profile Sat Feb 28 17:41:21 2026 UTC pencil

userpic

Re: Ошибка в задании 2.19 в задачнике

Мне даже интересно, с какого бодуна вы с такой уверенностью заявляете о наличии тут "ошибки". Где конкретно ошибка? В том, что два разных варианта задания предполагают вычисление одного и того же числа, причём варианты-то сами по себе разные, просто одно и то же вычисление входит в них оба, гм. А кто, когда, где написал/заявил/уж не знаю что ещё такое сделал, чтобы такое пересечение обязательно считалось ошибкой? Да даже если что-то такое кто-то где-то и заявил, меня это каким образом должно беспокоить?

From anon (unverified) Sat Feb 28 07:22:36 2026 UTC pencil

Ошибка в задачнике

Задача 2.32, 6 строка: "Цвета можете выстроить в любом порядке, какой вам нравЯтся;"

parent From Andrey V. Stolyarov profile Fri Apr 10 17:15:42 2026 UTC pencil

userpic

Re: Ошибка в задачнике

Есть такое, спасибо

From Ivan (unverified) Wed Feb 18 18:06:58 2026 UTC pencil

Ошибка в коде программы

II том, страница 167, функция session_check_lf

sess->buf_used -= (pos+1); // тут поле buf_used становится нулевым

memmove(sess->buf, sess->buf+pos+1, sess->buf_used); // тогда в функции memmove копируется 0 байт

parent From Andrey V. Stolyarov profile Wed Feb 18 18:45:37 2026 UTC pencil

userpic

Re: Ошибка в коде программы

> становится нулевым

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

> копируется 0 байт

несомненно, если кроме только что изъятой строки в буфере ничего нет, копировать больше нуля байт было бы несколько странно.

From feriman profile Sun Feb 15 21:38:38 2026 UTC pencil

userpic

Том I, стр. 171, 2 абзац снизу, 4 строка

В слове "Hewllett" одна буква 'l' лишняя. Правильно будет – "Hewlett".

parent From Andrey V. Stolyarov profile Fri Apr 10 17:22:03 2026 UTC pencil

From L_xV profile Fri Jan 30 14:02:38 2026 UTC pencil

Том I, стр. 199 - сноска на другой странице

Последнее слово в первом абзаце на этой странице: макрорасширением^25 уходит этой сноской на страницу 200

parent From Andrey V. Stolyarov profile Fri Jan 30 14:55:34 2026 UTC pencil

userpic

Re: Том I, стр. 199 - сноска на другой странице

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

From EVI profile Fri Jan 30 04:18:13 2026 UTC pencil

Том 2, п. 7.2.1, первые два абзаца.

... процессов, производящих данные ... Назовём эти процессы производителями.

... процессов, (потребляющих) ... Эти процессы мы назовём потребителями.

"Потребителями" набрано обычным шрифтом.

parent From Andrey V. Stolyarov profile Mon Apr 6 21:25:10 2026 UTC pencil

userpic

Re: Том 2, п. 7.2.1, первые два абзаца.

Спасибо, поправил в рукописи. В эррату не потащу, не такая уж это и ошибка :-)

From Ivan (unverified) Thu Jan 22 21:04:20 2026 UTC pencil

mac адрес

том 2 страница 145, первые два байта указывают на компанию производитель

В википедии пишут что первые три байта указывают на компанию прлизводитель

From не скажу (unverified) Thu Jan 22 20:50:04 2026 UTC pencil

опечатка

издание 2,91, первый том, стр 181, первое предложение параграфа 3.2.6, перечисление типов операндов, после слова непосредственные, слово задающее вместо задающие

parent From Andrey V. Stolyarov profile Fri Apr 10 20:30:24 2026 UTC pencil

userpic

Re: опечатка

Спасибо

From Ivan (unverified) Sun Jan 18 16:44:33 2026 UTC pencil

байты в mac адресе

II том, страница 145, сказано что первые два байта отвечают за компанию производитель, но в интернетах говорят что первые три байта

From Robert profile Sun Jan 18 00:45:25 2026 UTC pencil

Возможно ошибка

Том 2, стр. 39, абзац 7:

Сперва написано про модификатор разрядности для short или unsigned short, а затем сказано, что подобных модификаторов не предусмотрено:

Последняя часть директивы преобразования, записываемая непосредственно перед символом-спецификатором, представляет собой модификатор разрядности, который может быть:
  • буквой "h", означающей, что целочисленный параметр имеет тип short или unsigned short;
По той же причине не предусмотрено модификаторов разрядности для целых чисел размером менее чем int, то есть для short'ов и char'ов - при передаче в функции целочисленных параметров разрядности меньше, чем int, компилятор преобразует их к типу int, так что получить char или short функция printf не может (как и любая другая функция).

parent From Andrey V. Stolyarov profile Mon Apr 6 21:56:57 2026 UTC pencil

userpic

Re: Возможно ошибка

Вы правы, в действительности модификатор h есть, но зачем он нужен и что делает — совершенно непонятно. Там пришлось в итоге текст изрядно перелопатить.

From Николай (unverified) Mon Jan 12 20:25:08 2026 UTC pencil

лишняя буква в слове "поддерерва"

Здравствуйте.

Том 1, с. 147, 14-я строка сверху.

parent From Andrey V. Stolyarov profile Fri Apr 10 20:13:58 2026 UTC pencil

parent From Николай (unverified) Fri Apr 10 23:03:05 2026 UTC pencil

Re: лишняя буква в слове "поддерерва"

В начале этого предложения стоит "во-вторых". В первом издании перед этим было ещё и "во-первых".

parent From Andrey V. Stolyarov profile Sat Apr 11 07:44:43 2026 UTC pencil

userpic

Re: Re: лишняя буква в слове "поддерерва"

И вправду. Спасибо ещё раз.

From Илья (unverified) Fri Jan 9 15:30:54 2026 UTC pencil

Возможно ошибка

Во втором томе, на стр. 32, последний абзац, "Примерять const" - возможно имелось в виду "Применять const"

parent From Andrey V. Stolyarov profile Mon Apr 6 22:34:28 2026 UTC pencil

userpic

Re: Возможно ошибка

Конечно, применять. А почему "возможно"? По-моему, вполне очевидная опечатка.

From Николай (unverified) Thu Jan 8 19:44:58 2026 UTC pencil

лишняя буква?

Добрый день!

Том 1, с. 130, 13-я строка снизу (если не считать пустые):

"и работать с полученной переменной, обозначая её как с q^ вместо p^;".

Буква "с" перед q^ как будто осталась от чего-то.

parent From Andrey V. Stolyarov profile Mon Apr 6 21:47:36 2026 UTC pencil

userpic

Re: лишняя буква?

Факт, спасибо

From anon (unverified) Thu Jan 8 10:40:30 2026 UTC pencil

Потенциальная ошибка в издании 2.91

Здравствуйте. Страница 65, ближе к концу, последний пример, там случаем не лишний отступ у переменной s1 и вызовом функции f?

parent From Andrey V. Stolyarov profile Thu Jan 8 13:43:49 2026 UTC pencil

userpic

Re: Потенциальная ошибка в издании 2.91

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

From Koshelkov Pjotr profile Sat Jan 3 10:21:57 2026 UTC pencil

userpic

Не та функция

Том 3, параграф 11.1.14, стр. 129, абзац про различия функций вывода.

(prin1 (char-code 65)), там же (prin1 (char-code 10))

Функция char-code переводит символ в его код, а код в символ переводит функция code-char. Заодно можно ещё раз восхититься гениальности нейминга у CL-евцев.

parent From Andrey V. Stolyarov profile Mon Apr 6 15:20:56 2026 UTC pencil

userpic

Re: Не та функция

Факт, спасибо

From anon (unverified) Fri Jan 2 17:15:49 2026 UTC pencil

Ошибка во втором томе

Страница 127, третий абзац, отсчитывая от конца, последнее предложение: Важно только не забывать, что с типами размера большего, чем int, могут возникнуть проблемы.

int набрано не тем шрифтом.

parent From Andrey V. Stolyarov profile Mon Apr 6 21:40:03 2026 UTC pencil

userpic

Re: Ошибка во втором томе

Есть такое, спасибо. В рукописи поправил, в эррату не потащу, де-факто тут нет ошибки.

From Anton (unverified) Tue Dec 30 18:15:01 2025 UTC pencil

Ошибка в томе II

Здравствуйте! Во втором томе на странице 47 написано про функцию fseek, что она "... возвращает новое значение текущей позиции, считая от начала файла". Но, по справочнику man, эта функция возвращает 0 при успешном завершении и -1 при неудачном.

parent From Andrey V. Stolyarov profile Fri Apr 10 17:01:47 2026 UTC pencil

userpic

Re: Ошибка в томе II

Факт, спасибо.

From aambdahambda (unverified) Mon Dec 29 16:45:30 2025 UTC pencil

Возможные ошибки. 1-й том "Введения в профессию", страница 184.

Короткие (short) переходы используются для оптимизации в случае, если точка, куда надлежит "прыгнуть", отстоит отстаёт от текущей команды не более чем на 127 байт бит вперёд или 128 байт бит назад. В машинном коде такой команды смещение задаётся всего одним байтом, отсюда соответствующее ограничение.

parent From Andrey V. Stolyarov profile Mon Dec 29 17:29:43 2025 UTC pencil

userpic

Re: Возможные ошибки. 1-й том "Введения в профессию", страница 184.

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

NB: в тексте, к которому относится процитированный фрагмент, вы не поняли вообще ничего. Вот то есть от слова "совсем". Вдобавок вы ещё и не владеете русским языком (судя по тому, что слово "отстоит" вам чем-то не понравилось). Честно говоря, не вполне понимаю, зачем вы тратите время на мои книжки, всё равно ведь ничего из них не извлечёте.

parent From aambdahambda (unverified) Tue Dec 30 06:24:22 2025 UTC pencil

Re: Re: Возможные ошибки. 1-й том "Введения в профессию", страница 184.

Да, действительно, перечитал и ужаснулся. Благодарю и извиняюсь за потраченное время!

From EVI profile Sun Dec 28 17:28:13 2025 UTC pencil

П. 10.4.11 нарушение табу.

http://rebuildworld.net/taboo/c_and_cpp_subsets.html#novarinfor

В конструкторе копирования:

for(int i=0; i<20; i++)

А это табу точно относится именно к C++, а не к C? Т.к. при компиляции *.c с флагами -ansi -pedantic компилятор выдаёт, что так делать нельзя. При компиляции *.cpp с теми же флагами компилятор не ругается.

parent From Andrey V. Stolyarov profile Sun Dec 28 17:37:10 2025 UTC pencil

userpic

Re: П. 10.4.11 нарушение табу.

В C++ эта конструкция была разрешена изначально, задолго до первого стандарта. Но есть одна проблема: до какого-то момента считалось, что областью видимости переменной, описанной таким образом, является весь блок до конца, а потом (ближе к первому стандарту, но опять же сильно раньше его принятия) кто-то когда-то "решил", что так быть не должно (ну я в целом согласен, что это не очень логично) и область видимости переменной описанной в заголовке for, следует ограничить телом этого for. Ну, точнее заголовком и телом. В результате вот такой фрагмент

    for(int i = 0; i < 10; i++)
        // ...
    for(i = 100; i >= 0; i--)
        // ...

раньше был законным, а стал ошибочным, но если поставить слово int в начале второго for, то в компиляторах "после" это будет законно, но в тех, которые "до" (например, Borland C++ 4.0, ну это из того, что я сам лично видел) оно приведёт к ошибке.

В общем, данное табу именно в качестве табу относится к C++, поскольку для чистого Си его можно не оговаривать — для него и так всё, что из C99 и более поздних "стандартов", запрещено разом и оптом.

Что касается текста учебника, то конкретно этот фрагмент был написан в 2007 году (издан впервые в 2008), в те времена у меня ещё не появилось нынешней ясности со списком табу. Да, при подготовке очередного издания стоило это, наверное, выловить и удавить, но я тоже не бог.

parent From EVI profile Sun Dec 28 18:16:12 2025 UTC pencil

Re: Re: П. 10.4.11 нарушение табу.

Понял, принял.

Напоследок вопрос, т.к. у меня есть подозрения, что может есть какие-то свои традиции. Для ссылок, амперсант "цеплять" к типу или к переменной? В codestyle на эту тему ничего не написано, в трёхтомнике и так и сяк бывает:

// Page 44.
void max_min(float *arr, int len, float &min, float &max)
// Page 47.
class Cls1 {
  // ...
  Cls1(const Cls1& a) {
    // ...
  }

parent From Andrey V. Stolyarov profile Sun Dec 28 19:03:01 2025 UTC pencil

userpic

Re: Re: Re: П. 10.4.11 нарушение табу.

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

From EVI profile Sun Dec 28 16:46:01 2025 UTC pencil

Том 3, п. 10.4.8, предположительно стилистическая ошибка.

Сначала указана функция с заголовком:

void f(const A* ptr)

Звёздочка "прицеплена" к типу. Подумал, что это специфика стиля C++, но далее в этом же параграфе уже указана функция с заголовком "как учили раньше":

void f(const MyClass *p)

parent From Andrey V. Stolyarov profile Sun Apr 12 10:09:16 2026 UTC pencil

userpic

Re: Том 3, п. 10.4.8, предположительно стилистическая ошибка.

Формально это не ошибка, в эррату не потащу, но в тексте исправлю — в следующей версии будет как везде.

From Koshelkov Pjotr profile Sat Dec 27 21:00:37 2025 UTC pencil

userpic

Пропущено слово

Том 2, Приложение 4, последний абзац на стр. 224.

"...и именно так следует поступить, если вы хотите, [чтобы] Vim потом сам открыл..."

parent From Andrey V. Stolyarov profile Sun Apr 12 10:03:11 2026 UTC pencil

userpic

Re: Пропущено слово

Факт, спасибо

From EVI profile Fri Dec 26 13:07:12 2025 UTC pencil

Задачник. К части 10. Абстрактные типы данных.

"Следующие задачи построены в предположении, что вы уже прочитали главу 10.3".

Глава "Абстрактные типы данных в С++" -- 10.4.

parent From Andrey V. Stolyarov profile Sun Apr 12 10:30:44 2026 UTC pencil

userpic

Re: Задачник. К части 10. Абстрактные типы данных.

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

From Koshelkov Pjotr profile Tue Dec 23 14:20:54 2025 UTC pencil

userpic

Опечатка

Том 2, с. 185, самый конец параграфа 7.2 "...внутренние свойства процедур BARBER_WORK и CLIENT_WORK."

Выше вместо CLIENT_WORK использовалось CUSTOMER_WORK.

parent From Andrey V. Stolyarov profile Sat Apr 11 19:22:34 2026 UTC pencil

userpic

Re: Опечатка

Факт, спасибо

From Илья (unverified) Sat Dec 20 15:48:55 2025 UTC pencil

Скорее всего ошибка в задачнике

В задачнике на стр. 30 в задаче 2.28 "Если при старте программы экран по длине и/или ширине окажется меньше..." - возможно, имелось в виду "по длине и/или высоте"

parent From Andrey V. Stolyarov profile Sat Apr 11 19:33:03 2026 UTC pencil

userpic

Re: Скорее всего ошибка в задачнике

Длина экрана — это сильно, да. Причём и у меня в книжке, и у вас в комменте :-D А имелось в виду, естественно, "по ширине и/или высоте". Спасибо, короче.

From Илья (unverified) Tue Dec 16 01:48:07 2025 UTC pencil

Возможно ошибка в задачнике

В задачнике на стр. 34 в задаче 2.52 "По каждому файлу выдать в поток стандартного ввода" - возможно имеется ввиду Вывода

parent From Andrey V. Stolyarov profile Mon Apr 6 21:10:42 2026 UTC pencil

From Николай (unverified) Sat Dec 13 21:53:03 2025 UTC pencil

слово "пропорциональных"

Здравствуйте.

Том 1, стр. 140, третий абзац снизу, третье предложение.

Есть ощущение, что должно быть "число действий, пропорциональное высоте дерева".

Возможно, что и ошибаюсь.

parent From Andrey V. Stolyarov profile Fri Apr 10 17:05:56 2026 UTC pencil

userpic

Re: слово "пропорциональных"

Факт, вы совершенно не ошибаетесь. Спасибо.

From EVI profile Sun Dec 7 20:13:24 2025 UTC pencil

Очепятка задачник. 5.13

Вместо ";;", написано ";";.

parent From Andrey V. Stolyarov profile Sun Apr 12 10:08:00 2026 UTC pencil

userpic

Re: Очепятка задачник. 5.13

Ни фига это не очепятка, прочитайте фразу внимательно. Оборот "из двух символов <<;>>" эквивалентен обороту "из двух точек с запятой", что полностью соответствует смыслу текста.

From runner (unverified) Sun Dec 7 08:33:07 2025 UTC pencil

Ошибка в тексте задачника

Издание 2.91, с.55, задача 4.11, самая последняя строка

"одну из указаных программ"

Полагаю, имелось в виду "одну из указанНых программ"

parent From Andrey V. Stolyarov profile Sun Apr 12 10:21:15 2026 UTC pencil

From :w (unverified) Tue Nov 25 23:12:32 2025 UTC pencil

John Mauchly

Создали ENIAC американский учёный Джон Моушли и его ученик Дж. Эккерт

Не совсем ошибка или опечатка, иногда его пишут и как Моучли, но вроде бы правильнее Мокли (John William Mauchly (/ˈmɔːkli/ MAWK-lee; -- вики). Читал про историю компьютеров в другой книге и сначала не понял, что за Моушли тут, потом дошло. Забавно ещё, что на запрос "моушли" поисковик выдаёт маугли

parent From Andrey V. Stolyarov profile Mon Apr 6 22:23:47 2026 UTC pencil

userpic

Re: John Mauchly

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

From rkvg-es (unverified) Wed Nov 19 08:15:53 2025 UTC pencil

<< >> вместо &#171; &#187; в содержании документа

В третьем томе в содержании документа (которое на отдельной панели в просмотрщике отображается) заголовок "9.1. Загадочное слово <<парадигма>>" отображается со знаками больше/меньше вместо настоящих кавычек-ёлочек. Подозреваю, дело в том, что содержание вырабатывается автоматически из заголовков в исходнике, не учитывая при этом встречающихся в них шрифтовых лигатур. Так что почти наверняка есть и другие подобные заголовки.

parent From Andrey V. Stolyarov profile Wed Nov 19 09:23:20 2025 UTC pencil

userpic

Re: << >> вместо &#171; &#187; в содержании документа

Об этом я знаю (да, другие тоже есть). Как бороться — не знаю.

From anon (unverified) Mon Nov 17 06:04:36 2025 UTC pencil

Том 2, стр. 174, второй абзац снизу, последнее предложение

Подходящее по смыслу условие было сформулировано не вторым, а третьим.

parent From Andrey V. Stolyarov profile Sun Apr 12 10:19:03 2026 UTC pencil

From Ivan (unverified) Thu Nov 6 16:13:48 2025 UTC pencil

PolygonalChain

3 том, стр 71: Если в качестве точки привязки выбрать левую нижнюю вершину квадрата, а длину стороны квадрата обозначить буквой a, то ломанная должна начаться в точке привязки(что соотвествует вектору (0,0))...

Разве не вектору (x,y) - координаты точки привязки? А пройти через точки (x+a,y), (x+a, y+a), (x, y+a)?

parent From Andrey V. Stolyarov profile Thu Nov 6 19:01:06 2025 UTC pencil

userpic

Re: PolygonalChain

Разумеется, нет. Читайте внимательно. И не надо больше подобное тащить сюда.

From a (unverified) Wed Nov 5 01:11:54 2025 UTC pencil

Опечатка

Андрей Викторович, здравствуйте! В 3 томе на странице 108 на строке примерно 40 есть ссылка на литературу номер 15. Перед этой ссылкой идет название книги. Должно быть interpretation, а не implementation. В списке литературы в конце все хорошо

parent From Andrey V. Stolyarov profile Fri Apr 10 17:42:53 2026 UTC pencil

userpic

Re: Опечатка

Ну, страница-то, положим, 109, но всё равно спасибо :-)

From Stranger (unverified) Tue Oct 28 22:15:24 2025 UTC pencil

The Ultimate Question

Том 3, параграф 11.5.6 про функции в Хоупе, c. 167, строка 5:

"What do you get when you multiply six by nine";

Не уверен в подлинности, но похоже, что в оригинале используется союз "if":
"What do you get if you multiply six by nine?"

parent From Andrey V. Stolyarov profile Mon Apr 6 22:46:33 2026 UTC pencil

userpic

Re: The Ultimate Question

Пошарил по интернету, и да, похоже, я тут погорячился. Интересно, как мне это удалось. Спасибо :-)

From EVI profile Sat Oct 18 05:39:19 2025 UTC pencil

Редактор связей.

Недавно пришлось начать ковыряться с редактором связи. Перечитал связанный с ним раздел:

> ... ld ... даже умеет обрабатывать специальные файлы сценариев (linker scripts)

Если верить документации, то редактор связей не "даже умеет" работать со скриптами, это его основная функция (скрипт используемый по умолчанию можно узнать флагом --verbose).

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

parent From Andrey V. Stolyarov profile Sat Oct 18 07:38:18 2025 UTC pencil

userpic

Re: Редактор связей.

> это его основная функция

Основная функция — объектный код превращать в исполняемый файл. Как она там реализована под капотом, да пусть даже и не под капотом — это вопрос конкретной реализации.

> может раньше было как-то иначе

Понятия не имею. Ну то есть если под "раньше" понимать, скажем, 50 лет назад, то тут к бабке не ходи, не было никаких linker scripts, потому что не успели ещё напридумывать всяких weak symbols и прочего беспредела. А в какой момент всё это появилось — как говорят американцы, you don't want to know.

From kirill (unverified) Tue Oct 7 07:44:32 2025 UTC pencil

Опечатка в названии функции, т.2, стр. 84

Написано: "Такого же эффекта можно достичь и в одну строку с помощью функции mwprintw: mvprintw(..."

parent From Andrey V. Stolyarov profile Sun Apr 12 10:39:22 2026 UTC pencil

From EVI profile Thu Oct 2 13:22:56 2025 UTC pencil

Возможная ошибка, т.3, стр. 174

В самом верху страницы приведён пример "эстафеты":

for(;;) {
  while(turn != 0) {} /* Ждём, когда не равно 0. */
  section();
  turn = 1;           /* До сих пор не равно 0. */
                      /* А второй процесс ждёт turn != 1. */
  noncritical_job();
}

Ну-с, или я чего-то совсем не понимаю...

parent From Andrey V. Stolyarov profile Thu Oct 2 15:57:36 2025 UTC pencil

userpic

Re: Возможная ошибка, т.3, стр. 174

> Ну-с, или я чего-то совсем не понимаю...

Уж не знаю, совсем или не совсем, но никакой ошибки тут нет

parent From EVI profile Fri Oct 3 06:30:38 2025 UTC pencil

Re: Re: Возможная ошибка, т.3, стр. 174

> Уж не знаю, совсем или не совсем

Например, с алгоритмом Петерсона всё понятно.

> никакой ошибки тут нет

Извините, потрачу ещё вашего времени. Пример целиком.

for(;;) {			| for(;;) {
	while(turn != 0) {}	|	while(turn != 1) {}
	section();		|	section();
	turn = 1;		|	turn = 0;
	noncritical_job();	|	noncritical_job();
}				| }

Есть два параллельных процесса. Назовём их левый процесс и правый процесс. Изначально, предположим, turn = 0, таким образом. Если процесс доходит до цикла while (далее этот цикл буду называть спинлоком), левый заблокируется в спинлоке, а правый пойдёт дальше. После того как правый выполнит подпрограмму section(), turn = 0, т.е. у переменной turn останется то же значение, что и было изначально и левый процесс продолжит висеть в спинлоке. А правый процесс просто повторно выполнится после noncritical_job().

Если изначально turn = 1, тогда правый процесс будет вечно висеть в спинлоке, а левый бесконечно выполняться не блокируясь.

parent From Andrey V. Stolyarov profile Fri Oct 3 09:11:41 2025 UTC pencil

userpic

Re: Re: Re: Возможная ошибка, т.3, стр. 174

> т.е. у переменной turn останется то же значение

Ни разу. Если мы дошли до этого присваивания, то это само по себе значит, что turn имеет значение 1. Иначе мы бы сюда не попали. И левый процесс после этого присваивания из своего спинлока вывалится, а вовсе не "продолжит в нём висеть".

В дальнейшем подобное не раскрываю.

parent From EVI profile Fri Oct 3 09:22:02 2025 UTC pencil

Re: Re: Re: Re: Возможная ошибка, т.3, стр. 174

Всё, понял где случился мой затуп.

> Изначально, предположим, turn = 0 ... левый заблокируется в спинлоке, а правый пойдёт дальше.

На самом деле заблокируется правый процесс, т.к. while не if (спасибо, кэп). Блин, стыдоба какая, в мозгу что-то перемкнуло.

Большая благодарность! И ещё раз извиняюсь, что отвлёк.

From Ivan (unverified) Mon Sep 29 00:11:02 2025 UTC pencil

pause в примере на странице 127(II том)

На странице 127 в примере pressagain.c вы предлагаете заменить sleep(1) на pause(), чтобы программа не имела паразитной нагрузки и была еще более правильной. Но ведь в данном случае может возникнуть ситуация, когда после проверки условия в цикле программа теряет квант времени, и обработчик вызывается до pause(). То есть сообщение может вывестись 26 раз.

Я предполагаю, что конкретно в этом примере я что-то не так понял, потому что ниже вы в другом примере показываете, что pause() не всегда можно использовать.

parent From Andrey V. Stolyarov profile Mon Sep 29 20:58:16 2025 UTC pencil

userpic

Re: pause в примере на странице 127(II том)

> программа теряет квант времени

Это как, простите? Ну то есть я примерно понимаю, чтО вы имели в виду, но не в таких же выражениях 8-()

> обработчик вызывается до pause()

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

Подумаю, что тут можно сделать с текстом. "В лоб" тут поправить не получится, поскольку для совсем правильного варианта надо использовать sigsuspend, но его совершенно невозможно объяснить тем, кто сигналы видит впервые, и на кого рассчитан этот пример. А так, пардон, формально и утверждение, что можно было бы использовать sleep(3600), да и сам этот sleep(1) — "не совсем правильно". Можно было бы сделать usleep, например, на десятую долю секунды, уповая на то, что пользователь всё равно не заметит, но объяснения, почему так, наглядности примера очевидно навредят. А оставлять активное ожидание — это уже вообще беспредел.

Вообще-то, если совсем честно, в этом примере проблема проявиться не может даже теоретически, если только не допустить, что квант времени может быть равен нескольким считанным тактам — а такое допускать мешает тот простой факт, что переключение между процессами расходует несколько сотен тактов по меньшей мере, и даже просто вызов планировщика на тему "не пора ли тут что-то менять" тоже довольно жирный, так что кванты должны быть уж точно побольше. А если они побольше, с учётом того, что после возврата из блокирующего сисколла квант новый начинается, получается так, что кванта ну никак не может "не хватить" на то, чтобы сделать проверку условия и нырнуть обратно в pause, поскольку там этих тактов десятка полтора от силы. Т.е. вот это вот "слишком быстро обработчик сработал" может получиться только на входе в цикл (поскольку там перед входом есть что-то ещё), но это совершенно пофигу — чтобы проблема проявилась видимым образом, надо, чтобы ЭТО стряслось перед ПОСЛЕДНИМ вызовом pause. А оно там стрястись не может ну то есть вот вообще никак.

parent From Ivan (unverified) Mon Sep 29 21:10:45 2025 UTC pencil

Re: Re: pause в примере на странице 127(II том)

> программа теряет квант времени Под теряет я имел ввиду что истечет квант времени.

И еще у вас в Errat'е указана 218 страница хотя я писал что это 212

parent From Andrey V. Stolyarov profile Tue Sep 30 10:48:28 2025 UTC pencil

userpic

Re: Re: Re: pause в примере на странице 127(II том)

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

UPD: Не буду править эррату, это 218 страница, всё правильно.

parent From Ivan (unverified) Mon Sep 29 21:53:05 2025 UTC pencil

Re: Re: pause в примере на странице 127(II том)

> проблема проявиться не может даже теоретически

У меня получается вывести 26 сообщений вместо 25 если я отправляю сигнал из другого окна терминала с помощью

kill -SIGINT ; kill -SIGINT ; kill -SIGINT ; ... и так далее очень длинная строка.

Можно в условие цикла поставить (n < 1) так легче воспроизвести проблему. Только в этом случае квант времени истекает не после проверки условия цикла, а уже после вызова обработчика я так понимаю. Или же в самом обработчике

parent From Andrey V. Stolyarov profile Tue Sep 30 10:38:11 2025 UTC pencil

userpic

Re: Re: Re: pause в примере на странице 127(II том)

Вообще это несколько странно, надо разбираться, как так выходит.

> после вызова обработчика я так понимаю.

На возврате из сисколла обработчик отрабатывает первым, так что это совсем странно. Мало того, там ещё и sigreturn вызывается, который сам по себе вполне себе сисколл.

Ну хотя в моём примере обработчик откровенно перегружен, он же ещё и write делает. Ей-богу, мне уже интересно, что там происходит на самом деле.

UPD: вообще нет там ничего странного, если подумать. Там на возврате из pause начинает (но не так чтобы заканчивает) работу обработчик, чтобы обработать тот самый сигнал, который стал причиной возврата из pause. Дальше в зависимости от семантики signal возможно два случая: если сигнал SIGINT на время работы обработчика заблокирован, и если он, соответственно, НЕ заблокирован. Cигналами нас долбят (ну, во всяком случае могут долбить) с частотой достатчной для того, чтобы флажок, требующий обработки SIGINT, был взведён "всегда" (уж в те моменты, когда процесс переходит из режима ядра в режим пользовательского исполнения — точно; ну то есть на одноядерной системе это было бы не так, но где сейчас одноядерную систему найдёшь). Это значит, что очередной обработчик SIGINT начнёт свою работу то ли после одного из системных вызовов внутри предыдущей ипостаси обработчика, то ли сразу после его завершения — на выходе из sigreturn. Эдак мы сообщений напечатать можем вообще сколько угодно, а до проверки условия в главной программе дело так и не дойдёт. Пойду-ка я кое-что проверю :-)

UPD2: Ага, так оно и есть. Слепил вспомогательную программу, которая запускает кого сказано, а из родительского процесса, выждав десятую долю секунды для приличия (чтобы дать запущенному процессу успеть exec'нуться и установить свою диспозицию для сигнала), после этого "жарит" его SIGINT'ом, пока тот не спечётся (проверяется waitpit'ом с WNOHANG). Имеем вот такое:

$ ./int_grill ./pressagain | wc -l
40974
$ ./int_grill ./pressagain | wc -l
23271
$ ./int_grill ./pressagain | wc -l
196255
$ ./int_grill ./pressagain | wc -l
64941
$ ./int_grill ./pressagain | wc -l
162869
$ ./int_grill ./pressagain | wc -l
86940
$ ./int_grill ./pressagain | wc -l
1614

Напечатанное число — это сколько раз мы получаем сообщение от pressagain. Открою секрет, я там 25 заменил на 3 :-)

parent From Ivan (unverified) Tue Sep 30 21:19:52 2025 UTC pencil

From feriman profile Thu Sep 25 12:43:32 2025 UTC pencil

userpic

Опечатка

Том I, стр. 89, 9 строка снизу (без учёта сноски) — пропущена буква 'ю' в слове "соответствующее".

parent From Andrey V. Stolyarov profile Fri Apr 10 17:11:53 2026 UTC pencil

userpic

Re: Опечатка

Спасибо

From olyx (unverified) Tue Sep 23 13:15:42 2025 UTC pencil

Ошибка во 2 томе

Цитата из пункта 6.3.2. Сокет и его сетевой адрес "Функция возвращает ненулевое значение, если заданная строка является допустимой текстовой записью ip-адреса, и 0 в противном случае." Разве не наоборот, функция возвращает 0, если адрес допустимый и не 0 в противном случае. Далее идет обработка ошибок если !ok.

parent From Andrey V. Stolyarov profile Tue Sep 23 13:19:49 2025 UTC pencil

userpic

Re: Ошибка во 2 томе

В мозгу у тебя, блин, ошибка, а не во втором томе. if(!ok) срабатывает, если ok имеет значение 0 (и никакое другое). Т.е. тут ok — обыкновенная логическая ("булевская") переменная, традиционная для Си. Я бы её так не назвал, если бы она хранила что-то иное, нежели логическое значение, соответствующее успешному выполнению вызванной функции. Так что нет, не разве.

Прежде чем подобную хрень на сайт тащить, стоит, наверное, подумать, не?

From Ivan (unverified) Tue Sep 23 08:49:14 2025 UTC pencil

Задание переменной окружения прямо в команде

3 том. Стр 212(вроде где то еще), указано что можно задать переменную окружения конкретно для одной команды CVSROOT=/home/vasya/cvsroot echo $CVSROOT

У меня такой способ не работает конкретно для команды echo(выводится пустая строка). Правильно ли я понимаю что так работает потому что в моей системе echo is a shell builtin?

parent From Andrey V. Stolyarov profile Tue Sep 23 13:13:21 2025 UTC pencil

userpic

Re: Задание переменной окружения прямо в команде

1) Нет, builtin тут ни при чём. Просто подстановки переменных происходят во время анализа команды, а установка временного значения переменной -- уже после завершения анализа. Т.е. когда в тексте набранной вами команды происходит замена $CVSROOT на значение переменной CVSROOT, к этому моменту установка значения ещё не отработала. Если сама команда обратится к своему окружению, она там это временное значение переменной увидит, но echo к своему окружению, естественно, не обращается.

Вот вам иллюстрация на эту тему:

   ~$ FOO=BAR eval 'echo $FOO'
   BAR

NB: внутри апострофов подстановка переменных не производится, так что eval так и видит без изменения то, что в апострофах, и уже сам это "вычисляет", подставляя значение переменной FOO уже из своего окружения.

2) С техническими консультациями не сюда, а тех, кто учится, я консультирую только в рамках менторинга.

parent From Ivan (unverified) Tue Sep 23 20:25:34 2025 UTC pencil

Re: Re: Задание переменной окружения прямо в команде

Тоесть строка из книги CVSROOT=/home/vasya/cvsroot echo $CVSROOT и не должна выводить на экран значение переменной CVSROOT?

parent From Andrey V. Stolyarov profile Wed Sep 24 08:49:10 2025 UTC pencil

userpic

Re: Re: Re: Задание переменной окружения прямо в команде

Да, это ошибка. Спасибо за её выявление.

From EVI profile Fri Sep 12 15:17:58 2025 UTC pencil

Пример tcp_questn.c

Здравствуйте, Андрей Викторович!

Дошёл в своём обучении до написания сервера, решил задачу 6.12. Возник вопрос (пошлёте в менторинг -- пойму, обновлённые правила читал).

Если взять за основу ваш пример tcp_questn.c (за свой в силу неопытности не могу поручиться), насколько он годиться для использования в глобальной сети? Т.е. я открою порт, чтобы кто угодно мог подключиться к моему компьютеру и использовать эту программу.

Пока сам вижу только две угрозы:

1) Не может быть открыто более 1024 файловых дескрипторов, accept возвращает "Too many open files" (только что это проделал со своей программой получилось 1020 клиентов). Т.е. кто-то может заблокировать доступ к серверу. Наверное, надо делать какой-то дисконнект по таймауту и отслеживать, чтобы с одного ip-адреса можно было логиниться с некоторой задержкой, условно в 3 секунды.

2) Поскольку логи записываются в файл, то можно нагенерировать логов пока не кончится место на диске (хоть с тем же вызовом accept).

parent From Andrey V. Stolyarov profile Fri Sep 12 16:10:01 2025 UTC pencil

userpic

Re: Пример tcp_questn.c

> годиться

тся/ться, ну сколько можно?

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

Есть, впрочем, и хорошая новость. Вот то, что вы тут пишете про исчерпание дескрипторов и забивание дисков логами — против этого ваши меры вроде трёхсекундного таймаута не помогут, и вообще ничего не поможет. От DoS'ов вообще защищаться проблематично. Вот только это не так чтобы было сильно опасно: никто при этом не получит доступа к вашим данными, никто при этом не сможет запускать программы на вашей машине. Ну то есть бяка как бяка, но не так чтоб серьёзная.

На мой взгляд, основная мера защиты тут очень простая: демон, слушающий внешние порты, должен работать под своим собственным псевдопользователем. Если ему нужен привилегированный порт — сбиндить сокет на этот порт, после чего полномочия сбросить. Между прочим, практически всё серверное ПО именно так и делает. Чтобы если таки проломят — дальше этого псевдопользователя в систему не пролезли.

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

parent From EVI profile Fri Sep 12 21:47:50 2025 UTC pencil

Re: Re: Пример tcp_questn.c

> тся/ться, ну сколько можно?

Правила знаю, рука дрогнула, извините.

> Есть, впрочем, и хорошая новость.

> против этого ваши меры ... не помогут

> и вообще ничего не поможет.

Да, хорошая новость.

> должен работать под своим собственным псевдопользователем.

Понял, принял, благодарю!

> для своей работы (рабочую станцию) не надо использовать в роли сервера.

Здесь у меня всё красиво. Когда я только начинал читать ваш трёхтомник, обзавёлся небольшим дешёвым б/у нетбуком, с помощью которого ознакомился с Linux. Потом научился с ним работать по ssh. А потом он плавно превратился в домашний сервер. Пока не подводил.

From Ivan (unverified) Thu Sep 11 12:05:25 2025 UTC pencil

возращаемое значение brk

На странице 112 указано что brk(0) возвращает текущий адресс конца сегмента данных, ну или его + random brk offset, в man к brk, заголовок этой функции выглядит вообще как int brk(void *addr);. Тоесть он же вообще не возвращает адресс, вместо этого он возращает успешность выполнения. А под ваше описание brk частично подходит функция sbrk(которая не является системным вызовом)

parent From Andrey V. Stolyarov profile Fri Sep 12 08:39:32 2025 UTC pencil

userpic

Re: возращаемое значение brk

Цитирую ту же man-страницу, только ближе к концу:

The return value described above for brk() is the behavior provided by the glibc wrapper function for the Linux brk() system call. (On most other implementations, the return value from brk() is the same; this return value was also specified in SUSv2.) However, the actual Linux system call returns the new program break on success. On failure, the system call returns the current break.

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

parent From Ivan (unverified) Sun Sep 14 22:50:56 2025 UTC pencil

Re: Re: возращаемое значение brk

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

parent From Andrey V. Stolyarov profile Mon Sep 15 07:07:23 2025 UTC pencil

userpic

Re: Re: Re: возращаемое значение brk

> Интересно, много ли ещё подобных обёрток?

До чёрта.

> Где в таком случае можно прочитать

В документации по ядру.

From Maksim (unverified) Mon Sep 8 16:08:11 2025 UTC pencil

Том II, стр. 47

Здравствуйте! Сейчас читаю Ваш второй том, дошёл до главы "4.4.7. Блочный ввод-вывод", и хотел бы сообщить об опечатке. На странице 47 написано, что функция fseek "...возвращает новое значение текущей позиции, считая от начала файла". Но в справочнике man говорится следующее: "Upon successful completion, fgetpos(), fseek(), fsetpos() return 0, and ftell() returns the current offset" (manpages.ubuntu.com/manpages/questing/en/man3/fseek.3.html). И в программе у меня fseek тоже возвращает 0, успешно завершившись...

parent From Andrey V. Stolyarov profile Sun Apr 12 10:04:44 2026 UTC pencil

userpic

Re: Том II, стр. 47

Это не опечатка, это фактическая ошибка в тексте. Спасибо.

From ilya (unverified) Sun Aug 24 10:08:28 2025 UTC pencil

Очепятка?

32 страница, последний абзац (издание 2.91): "ПримеРять const". Должно быть "ПримеНять const"?

parent From Andrey V. Stolyarov profile Sun Apr 12 09:55:21 2026 UTC pencil

From technocrat (unverified) Sun Aug 24 08:15:30 2025 UTC pencil

Авторские права

Андрей Викторович, здравствуйте!
Будет ли, что-то или всё, из перечисленного:
- нарушением лицензии книги "Программирование: введение в профессию",
- ущемлением Ваших прав и интересов,
- оскорблением Ваших идей и убеждений
размещение личного конспекта выше упомянутой книги в публичном репозитории Github,
исключительно в целях личного использования и в качестве резервной копии?
Лицензию я читал, но я не уверен в том, что всё понимаю так, как Вы задумывали.
Спасибо!
С уважением!

parent From Andrey V. Stolyarov profile Sun Aug 24 10:54:59 2025 UTC pencil

userpic

Re: Авторские права

> - нарушением лицензии книги "Программирование: введение в профессию"

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

> - ущемлением Ваших прав и интересов,

Зависит от того, что такое "личный конспект". Если там не будет прямых заимствований из книги, т.е. фрагментов её текста (в том числе "изложенных своими словами", т.е. просто перевранных), то это вообще не имеет никакого отношения ко мне. Если таковые там будут (а они, скорее всего, будут) — это будет прямым нарушением авторских прав. И, кстати, личных неимущественных прав тоже.

Вопрос ещё в границах допустимости, т.е. где кончается обоснованное цитирование и начинается заимствование. Точно можно сказать, что если кусок текста из книги не оформлен как цитата, т.е. не обозначаны в явном виде начало цитаты, конец цитаты и/или нет ссылки на источник цитаты — то это уже просто тупо плагиат, за такое вообще следует убивать в изощрённой форме (к копирайту, заметим, это не имеет никакого отношения, это злостное нарушение "права авторства", а если отбросить юридические крючки — то злонамеренный обман публики). А вот если цитата полностью правильно оформлена в качестве таковой, то возникает вопрос, каков её предельный объём, "оправданный целью цитирования" (это, если что, прямо-таки формулировка из ГК РФ, номер статьи не помню — но правила fair use более-менее одинаковы по всему миру). Могу, впрочем, сказать совершенно точно, что если общий объём "цитат" там будет сколько-нибудь сравним с объёмом вашего собственного текста или тем паче будет его превышать — то ни о каком fair use речи уже не пойдёт, это будет производная работа, а таковые для моих книг категорически запрещены.

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

> - оскорблением Ваших идей и убеждений

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

Вообще, честно говоря, мне не вполне понятно, как в принципе можно использовать гитхаб — ну то есть как можно быть настолько тупой мразью, чтобы его использовать. А ещё мне крайне неприятно, что из моих книг даже такая тупая мразь ухитряется для себя извлекать какую-то пользу (увы, это неизбежно; мои книжки даже всякая вебанутая плесень почитывает).

Поделать с этим я ничего не могу, но уж раз спросили — получите.

Хотя, конечно, как может быть размещение на гитхабе предназначено "в целях личного использования и в качестве резервной копии" — это уже вообще покрыто мраком. Вы хоть сами-то поняли, что за бред написали?

parent From technocrat (unverified) Tue Aug 26 15:02:12 2025 UTC pencil

Re: Re: Авторские права

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

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

"Личный конспект", да, это запись "переваренного" для
быстрого восстановления изученного в памяти, в случае долгого перерыва в
изучении и для эффективного переключения "контекста" изучения.

На каких либо агрегаторах Git-копию "личного конспекта"
резервировать не стану, а буду просто шифровать, архивировать tar'ом и
хранить архивы на раздельных накопителях информации.

From Anton (unverified) Sun Aug 24 05:14:12 2025 UTC pencil

Xterm

Извините за глупый вопрос. Как настроить xterm так, чтобы он не отображал цвета? Только серые символы на чёрном фоне.

parent From Andrey V. Stolyarov profile Sun Aug 24 11:00:45 2025 UTC pencil

userpic

Re: Xterm

Это не настройки xterm, это вопрос поведения запускаемых программ.

    export TERM=vt100

в большинстве случаев гиганта мысли вполне спасёт. Ну или

    export TERM=xterm-mono

— так будут все возможности xterm (которые намного шире, чем возможности vt100), не будет только цвета.

From Александр (unverified) Tue Aug 19 14:10:33 2025 UTC pencil

Использование регистра EAX

На странице 186 первого тома приводятся два примера замены команды loop: с использованием регистра EAX и с использованием регистра ECX. Пример с регистром ECX я понял, а вот пример с регистром EAX вызывает вопросы. Насколько я понимаю, для замены инструкции loop нужно использовать две команды: декремент счетчика и условный переход. Но если в качестве счетчика использовать регистр EAX, не исказится ли сумма, которая должна накапливаться в этом же регистре?

parent From Andrey V. Stolyarov profile Tue Aug 19 15:07:24 2025 UTC pencil

userpic

Re: Использование регистра EAX

Там никоим образом не имеется в виду, что те две команды, которые используют EAX, следует вставить в пример абзацем выше прямо вместо команды loop. Напротив, сказано, что вот точно так же мы можем поступить с ECX, и это есть вполне себе замена для loop.

From Дмитрий (unverified) Sat Aug 16 08:14:46 2025 UTC pencil

Сервер не отдает книги

Сервер не отдает книги, или проблема с моей стороны?

parent From Andrey V. Stolyarov profile Sun Aug 17 12:40:56 2025 UTC pencil

userpic

Re: Сервер не отдает книги

Буквально только что:

crocodil@trex:/tmp$ wget http://www.stolyarov.info/books/pdf/progintro_2_91_v1.pdf
--2025-08-17 15:35:13--  http://www.stolyarov.info/books/pdf/progintro_2_91_v1.pdf
Resolving www.stolyarov.info (www.stolyarov.info)... 172.245.129.210
Connecting to www.stolyarov.info (www.stolyarov.info)|172.245.129.210|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3614726 (3,4M) [application/pdf]
Saving to: 'progintro_2_91_v1.pdf'

progintro_2_91_v1.p 100%[===================>]   3,45M   892KB/s    in 4,8s    

2025-08-17 15:35:18 (730 KB/s) - 'progintro_2_91_v1.pdf' saved [3614726/3614726]

crocodil@trex:/tmp$ 

Так что сервер, во всяком случае, всё отдаёт.

parent From Евгений (unverified) Tue Aug 19 14:48:10 2025 UTC pencil

Re: Re: Сервер не отдает книги

Присоединяюсь, не отдаёт. РФ, МТС.

parent From Andrey V. Stolyarov profile Tue Aug 19 15:08:50 2025 UTC pencil

userpic

Re: Re: Re: Сервер не отдает книги

Мне вот что интересно, я явным образом указал автору исходного коммента, что проверил этот момент и всё работает. Чего вы ещё от меня хотите? Или вам чисто воздух посотрясать?

На всякий случай только что проверил с машины, расположенной в России. Всё нормально отдаётся. Дальнейшие вопросы адресуйте вашему провайдеру, вашему браузеру и вашему устройству. Я тут вам помочь ничем не могу.

parent From Михаил (unverified) Wed Aug 20 19:59:25 2025 UTC pencil

Re: Re: Re: Сервер не отдает книги

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

Раньше вроде где-то в гостевой про похожие же проблемы писали.

parent From Andrey V. Stolyarov profile Wed Aug 20 20:07:53 2025 UTC pencil

userpic

Re: Сервер не отдает книги

Насколько мне издали видно, в России больше не следует рассчитывать на мобильный интернет. Вот то есть вообще. Нету больше этого вида услуги связи.

Мне, впрочем, издали может быть плохо видно.

From Илья (unverified) Wed Aug 13 14:03:09 2025 UTC pencil

Возможно неправильно назван файл

В первом томе на 125 странице во втором листинге возможно неправильно назван файл gennumtx.pas

parent From Andrey V. Stolyarov profile Mon Apr 6 21:16:16 2026 UTC pencil

userpic

Re: Возможно неправильно назван файл

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

From Ivan (unverified) Sun Aug 10 22:11:31 2025 UTC pencil

директивы преобразования printf

Может я чего не понял, но на странице 39, 2 том: "буквой << h >>, означающей, что целочисленный параметр имеет тип short или unsigned short", затем ниже: "По той же причине не предусмотрено модификаторов разраядности для целых чисел размеров менее чем int, тоесть для short'ов и char'ов"

parent From Andrey V. Stolyarov profile Fri Apr 10 20:34:27 2026 UTC pencil

userpic

Re: директивы преобразования printf

Да-с, рудимент. Пришлось там текст перелопатить, потому что логики в этом никакой не видно.

From LIS (unverified) Tue Aug 5 10:37:55 2025 UTC pencil

Опечатка

Том первый. Издание 2.91. Страница 19.

...в качестве своеобразного «бонуса» в часть включена глава о построениии на Си++ графических пользовательских интерфейсов с использованием библиотеки FLTK

parent From Andrey V. Stolyarov profile Fri Apr 10 17:38:53 2026 UTC pencil

userpic

Re: Опечатка

Есть такое

From LIS (unverified) Tue Aug 5 10:14:27 2025 UTC pencil

Опечатка

Том первый. Издание 2.91. Страница 39.

Для программирования этот редактор исходно не предназначен, но целый ряд сугубо «програмистских» функций, таких как подсветка синтаксиса, автоматический сдвиг и т. п., в нём всё-таки предусмотрен.

parent From Andrey V. Stolyarov profile Mon Apr 6 21:34:03 2026 UTC pencil

userpic

Re: Опечатка

Факт, благодарю

From LIS (unverified) Tue Aug 5 09:26:31 2025 UTC pencil

Опечатка

Том первый. Издание 2.91. Страница 30.

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

parent From Andrey V. Stolyarov profile Mon Apr 6 21:20:46 2026 UTC pencil

userpic

Re: Опечатка

Факт, спасибо

From LIS (unverified) Tue Aug 5 09:14:49 2025 UTC pencil

Опечатка

Том первый. Издание 2.91. Страница 23.

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

parent From Andrey V. Stolyarov profile Mon Apr 6 22:20:25 2026 UTC pencil

userpic

Re: Опечатка

Да, есть такое

From L_xV (unverified) Mon Aug 4 11:55:45 2025 UTC pencil

Благодарность + опечатка

Спасибо за старания!

Первый том, на 142 стр. где приведён файл hanoi.pas. В архиве в этом файле переменная transit изменена на interm .

parent From Andrey V. Stolyarov profile Fri Apr 10 20:26:49 2026 UTC pencil

userpic

Re: Благодарность + опечатка

Раньше она и в тексте называлась interm, потом в тексте я имя изменил на более наглядное, а в примере в архиве, разумеется, забыл. Спасибо за внимательность! В эррату я это не потащу, эррата всё-таки про книгу, но исходник примера в следующем издании будет с текстом синхронизирован.

From EVI profile Fri Aug 1 07:10:23 2025 UTC pencil

Благодарность!

Спасибо большое! Читаю в основном 2-й и 3-й тома, но иногда к 1-му возвращаюсь. К кликабельной навигации быстро привыкаешь.

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

parent From Andrey V. Stolyarov profile Fri Aug 1 09:00:53 2025 UTC pencil

userpic

Re: Благодарность!

> кликабельные сноски для возврата

Технически такая возможность есть, но при этом, увы, ломаются все ссылки на текст, которые помечены метками иначе как сразу после заголовка главы/параграфа. А у меня таких — овердофига, избавиться от них нереально; надо было с самого начала таких не делать, но кто ж знал-то.

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

parent From EVI profile Fri Aug 1 09:25:08 2025 UTC pencil

Re: Re: Благодарность!

> в том же atril надо в настройках добавить в тулбар кнопку "Back"

Нашёл, добавил, почему-то конкретно со сносками "Back" не работает. А вот с содержанием всё ок. :^) А у вас нормально работает?

parent From Andrey V. Stolyarov profile Fri Aug 1 10:01:13 2025 UTC pencil

userpic

Re: Re: Re: Благодарность!

Гы, проверил — и вправду не работает. Видимо, там это "назад" работает по номеру страницы. Программисты писали, чо.


pencil

пояснение


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

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2026