Стивенс р раго unix профессиональное программирование 2007

CS631 — APUE


План курса

В этом курсе студенты научатся разрабатывать сложное программное обеспечение системного уровня на языке программирования C. Получая при этом глубокое понимание операционной системы Unix (и всех ОС. Принадлежащих к этому семейству. Таких как Linux. BSD и даже Mac OS X) и ее среды программирования. Рассматриваемые темы будут включать интерфейс пользователя/ядра. Фундаментальные концепции Unix. Аутентификацию пользователей. Базовый и расширенный ввод-вывод. Файловые системы, сигналы. Отношения процессов и межпроцессную коммуникацию. Также будут рассмотрены фундаментальные концепции разработки и обслуживания программного обеспечения в системах Unix (инструменты разработки и отладки, такие как

Ожидается, что студенты будут иметь хорошее рабочее знание языка программирования C. Ранее писали нетривиальные программы и смогут грамотно использовать систему Unix с интерфейсом командной строки. Вся курсовая работа будет выполняться исключительно в системе Unix из командной строки. Это не введение в использование Unix!

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

(Это имеет дополнительное преимущество, показывая. Что вы действительно прочитали. По крайней мере. Это далеко на этой странице.)

Этот класс значительно пересекается с CS392 `Системное программирование


Время, Дата и Место:

Интерактивный/синхронный: Понедельник, 18:15 — 20:45 по Восточному Времени, через Zoom
Online on-demand: в любое время через видеолекции YouTube

Инструктор:

Jan Schaumann [jschauma@stevens.edu]

Когда вы пишете мне по электронной почте, пожалуйста. Используйте свой @stevens.edu адрес.

Скорее всего. Я даже не увижу вашу электронную почту. Если она будет отправлена с gmail или любого другого адреса. Отличного от адреса Стивенса.

Ресурсы:

Содержание и обсуждения:

Задания и метаинформация:

Ссылки и документы по теме:

Наконечники инструментов:

Твиты @cs631apue

исходный код

Вы будете писать много кода в этом классе. Вы также можете обнаружить необходимость читать много кода. Написанного не вами. А также страницы руководства. Сопровождающие источники.

Наша основная справочная платформа-NetBSD. И вы можете установить полные исходники в

свою виртуальную машину, например. С помощью этого скрипта.

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


Учебники:

Учебник, используемый в этом классе:

Следующие книги рекомендуются исключительно для вашего личного ознакомления. Они не используются в классе в качестве текста. Но являются связанными и очень полезными книгами:

  • `Язык программирования Сиважно: убедитесь. Что вы получили 2-е издание, охватывающее ANSI C.
    Брайана У. Кернигана и Денниса М. Ричи.
    Prentice Hall. Inc., 1988.
    ISBN 0-13-110362-8 (мягкая обложка), 0-13-110370-9 (твердая обложка).

  • `Практика программирования
    Брайана У. Кернигана и Роба Пайка.
    Addison-Wesley. Inc., 1999.
    ISBN 0-201-61586-X.

Используемые системы

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

Все оценки будут выполняться в системе NetBSD 9.0.

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

Вы также можете найти полезным завести себе учетную запись в системах Stevens linux-lab, чтобы иметь возможность сравнивать другую систему.


Классификация:

Скорее всего так и будет:

  • участие в курсе и классные заметки: 50 баллов
  • 2 домашних задания по 25 баллов каждое
  • 1 среднесрочный проект. Стоимостью 100 баллов
  • 1 групповой проект. Стоимостью 200 баллов
  • 1 итоговое задание. Стоящее 100 баллов

  • никаких заданий по макияжу
  • никаких дополнительных кредитов
  • нет кривой

Буквенные оценки будут даны следующим образом:

В пределах каждой буквенной оценки есть +/- оценки. Данные по усмотрению преподавателя. (Исключение: нет никакого А+)

Плагиат. Мошенничество и другие способы получить двойку

Это действительно не должно быть необходимо. Но просто для того. Чтобы упредить любые жалобы. Которые я не ясно выразился:

Студенты сами отвечают за свою работу. Неэтично (а в некоторых случаях и незаконно) представлять в качестве своего произведения идеи. Слова или представления другого без надлежащего указания источника.

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

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

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

.


Домашние задания:

Задания будут публиковаться по мере прохождения семестра.

Следующие упражнения не оцениваются. Но рекомендуются к выполнению до или вскоре после данной лекции. Чтобы помочь вам лучше понять понятия. О которых идет речь.


Среднесрочный проект:

Выполните команду ls(1)Подробнее см. Полное описание среднесрочного проекта.


Групповой проект:

Выполните команду sws(1)Подробнее см. Полное описание проекта группы.


Учебный план:

Домашние задания. Слайды и другие материалы. Перечисленные ниже. Относятся к предыдущему семестру. Мы будем обновлять содержание по мере продвижения семестра.

Дата Тема Чтение Ссылки
2020-08-31 Введение. История UNIX. Основы программирования UNIX Стивенс: Главы 1, 2
История Unix и основные функции
Неделя 01, Этап 1: Введение
[слайды] [видеолекция] [стенограмма]
 
неделя 01, сегмент 2: с Unix история
[слайды] [видеолекция] [стенограмма]
 
неделя 01, сегмент 3: Unix и основы
[слайды] [видеолекция] [стенограмма]
 
просто-кот.с
простого-общ. с
простой оболочкой.с
простого-shell2.З.
надпись.с
2020-09-07 Праздник Дня труда
2020-09-14 Файловый ввод-Вывод. Общий доступ к файлам

Стивенс: Глава 3 Неделя 02, Сегмент 1: файловых дескрипторов
[слайды] [видеолекция] [стенограмма]
 
неделя 02, Этап 2: открытие(2)/близкий(2)
[слайды] [видеолекция] [стенограмма]
 
неделя 02, сегмент 3: чтение(2)/написать(2)/использует lseek(2)
[слайды] [видеолекция] [стенограмма]
 
неделя 02, Сегмент 4: файл обмена
[слайды] [видеолекция] [стенограмма]
 
и argv.с
соб.З.
дыру.с
использует lseek.С
то openex.с
openmax.с
перенаправителя.с
rwex.с
синхронизации-кошка.с

HW1: bbcp(1)

2020-09-21 Файлы и каталоги Стивенс: Глава 4 Неделя 03, Сегмент 1: стат(2) интро

[слайды] [видеолекция] [стенограмма]
 
неделя 03, Этап 2: введение жидкостей
[слайды] [видеолекция] [стенограмма]
 
неделя 03, сегмент 3: структура стат st_mode
[слайды] [видеолекция] [стенограмма]
 
неделя 03, участок 4 а: chmod(2) а chown(2)
[слайды] [видеолекция] [стенограмма]
 
неделя 03, сегмент 5: значение umask(2)
[слайды] [видеолекция] [стенограмма]
 
 
доступа.с
помощью команды chmod.с
помощью chown.с
myuids.с
установленным битом setuid.с
размером.с
простого-общ. с
простого-ЛС-стат.с
значением umask.З.
курсовую работу задание

2020-09-28 Файловые системы. Системные файлы Данных. Время и Дата

Стивенс: Глава 4, 6
Файловые системы и модели храненияданных : 4.4.1, 4.5 — 4.7
Неделя 04, Сегмент 1: файловая система Unix
[слайды] [видеолекция] [стенограмма]
 
неделя 04, сегмент 2: ссылки
[слайды] [видеолекция] [стенограмма]
 
неделя 04, сегмент 3: каталоги
[слайды] [видеолекция] [стенограмма]
 
неделя 04, сегмент 4: размер каталога
[слайды] [видеолекция] [стенограмма]
 
неделя 04, сегмент 5: файл /etc/passwd с
[слайды] [видеолекция] [стенограмма]
 
неделя 04, сегмент 6: getpwuid(2) и /etc/групп

[слайды] [видеолекция] [стенограмма]
 
неделя 04, 7 сегмент: время доступа, время изменения, то ctime
[слайды] [видеолекция] [стенограмма]
 
неделя 04, Сегмент 8: времени(3) является иллюзией
[слайдов] [видеолекция] [стенограмма]
 
 
cd.c
getpw.c
groups.c
wait-unlink.c
sizeof.c
time.c

2020-10-05 Инструменты UNIX: cc(1), make(1). Revision control, diff(1). Patch(1), gdb(1) CVS Documentation
Mini FAQ о misc libc/gcc crt files
Debugging with GDB
Guide to Faster. Less Frustrating Debugging
gdb Tutorial
Git
Слайды лекций

собрать примеры цепочек
сделать примеры
gdb примеры

2020-10-12 Осенний Перерыв
2020-10-13 Технологическая Среда. Управление Технологическим Процессом

Стивенс: Главы 7, 8
Разбивая Стек Для Удовольствия И Прибыли
Linux x86 Запуск Программы
stdarg И Случай Забытых Регистров
Примечание: занятия

неделя 06, Этап 1: работы с памятью процесса
[слайды] [видеолекция] [стенограмма]
 
неделя 06, Этап 2: Запуск программы
[слайды] [видеолекция] [стенограмма]
 
неделя 06, Этап 3: завершение
[слайды] [видеолекция] [стенограмма]
 
неделя 06, сегмент 4: окружающей среды
[слайды] [видеолекция] [стенограмма]
 
неделя 06, сегмент 5: процесс лимиты и идентификаторы
[слайды] [видеолекция] [стенограмма]
 
неделя 06, сегмент 6: процесс управления
[слайды] [видеолекция] [расшифровка]
 
 
testcp.sh
пост.с
входа.с
Выход-обработчиков.с
forkflush.с
forkseek.с
ГВ.с
Танос.с
памятью-layout0.с
память-layout1.c
память-layout2.c
память-layout3.c
память-layout4.c
память-layout5.c
память-layout6.c
память-layout7.c
память-layout8.c
сумма.c
зомби.c

NetBSD crt0-common.c

2020-10-19 Группы процессов, Сеансы. Сигналы Stevens: Chapter 9, 10
POSIX Terminal Interface Description
Shichao Notes
FreeBSD Process Management (from
Неделя 07, Сегмент 1: войти процесса
[слайды] [видеолекция] [стенограмма]
 
неделя 07, сегмент 2: группы процессов и сеансы
[слайды] [видеолекция] [стенограмма]
 
неделя 07, Этап 3: Работа управление
[слайды] [видеолекция] [стенограмма]
 
неделя 07, сегмент 4: сигналы
[слайды] [видеолекция] [стенограмма]
 
неделя 07, сегмент 5: Реентерабельной и прервал функции
[слайды] [видеолекция] [стенограмма]
 
 
ошибкой eintr.З.
В ожидании.с
реентерабельными.с
signals1.с
signals2.с
signals3.с
signals4.с
sigusr.с
2020-10-26 Межпроцессная коммуникация I Стивенс: Глава 14
Введение в общую память
Семафоры в Linux
Межпроцессная коммуникация с использованием очередей сообщений POSIX в Linux
Неделя 08, Сегмент 1: Межпроцессная связь интро
[слайды] [видеолекция] [стенограмма]
 
неделя 08, сегмент 2: Система в МПК
[слайды] [видеолекция] [стенограмма]
 
неделя 08, 3 сегмента: трубы и порта
[слайды] [видеолекция] [стенограмма]
 

БСД МПК руководство
Beej руководство для Unix МПК

памяти-макет.с
mqrecv.с
mqsend.с
msgrecv.с
pipe1.с
pipe2 с.с
к popen.с
semdemo.с
shmdemo.с

ГВ#2: Выполнить команду ‘(3)’

2020-11-02 Межпроцессная коммуникация II Стивенс: Глава 14
BSD IPC
How Linux creates sockets and counts them
How Linux allows TCP introspection
The C10K problem
Неделя 09, Сегмент 1: socketpair(2)
[слайды] [видеолекция] [стенограмма]
 
неделя 09, сегмент 2: в Socket(PF_LOCAL, SOCK_DGRAM, 0)
[слайды] [видеолекция] [стенограмма]
 
неделя 09, сегмент 3: в Socket(PF_INET, SOCK_DGRAM, 0)
[слайды] [видеолекция] [стенограмма]
 
неделя 09, Сегмент 4: в Socket(PF_INET6, являются sock_stream, 0)
[слайды] [видеолекция] [стенограмма]
 
неделя 09, сегмент 5: ввода/вывода мультиплексирования
[слайды] [видеолекция] [стенограмма]
 

двойным стеком-streamread.с
socketpair.с
udgramread.с
udgramsend.с
dgramread.с
dgramsend.с
streamread.с
streamwrite.с
двух розеток.с
двух розеток-выбор.с
одного гнезда-выберите.с
назначение проекта one-socket-select-fork.c

Group

2020-11-09 Деймонские процессы, HTTP / Групповые Обсуждения проектов   Неделя 10, Сегмент 1: Процессы Деймона
[слайды] [видеолекция] [стенограмма]
 
Слайды лекций
2020-11-16 Общие библиотеки Стивенс: Глава 13
Как читать исполняемую
серию сообщений в блоге Яна Лэнса Тейлора о линкерах
Линкеры и загрузчики
Как писать Общие библиотеки
Исполняемый и Связываемый формат (ELF)
На 11 неделе Сегмент 1: исполняемый и связываемый формат
[слайды] [видеолекция] [стенограмма]
 
неделя 11, сегмент 2: из-линкеры и загрузчики
[слайды] [видеолекция] [стенограмма]
 
неделя 11, сегмент 3: разделяемые библиотеки
[слайды] [видеолекция] [стенограмма]
 
склеп.с
dlopenex.З.
зло.ц
привет.с
ldtest1.2.с
ldtest1.с
ldtest2.с
основным.с
setget.с
libgreet упражнения
2020-11-23 Расширенный ввод/вывод: Неблокирующий ввод/вывод. Опрос и блокировка / шифрование записи в двух словах Стивенс: Глава 14 Неделя 12, Сегмент 1: системный журнал(3)
[слайды] [видеолекция] [стенограмма]
 
неделя 12, сегмент 2: неблокирующего ввода/вывода
[слайды] [видеолекция] [стенограмма]
 
неделя 12, сегмент 3: ресурс замок
[слайды] [видеолекция] [стенограмма]
 
неделя 12, 4 сегмента: Асинхронный и памяти ввода/вывода
[слайды] [видеолекция] [стенограмма]
 

лекция слайды (предыдущий семестр. Включает раздел. Посвященный основам шифрования)

slogdemo.с
неблоковый.с
паствы.с

2020-11-30 Ограничение процессов / Контейнеров Примечания к курсу
Планирование потоков и связанные с ними интерфейсы в NetBSD 5.0
Закрепление ЦП и наборы ЦП
Неделя 13, Этап 1: по стандарту POSIX списки контроля доступа
[слайды] [видеолекция] [стенограмма]
 
неделя 13, Этап 2: eUIDs, флагов файлов, с возможностью крепления securelevels
[слайды] [видеолекция] [стенограмма]
 
неделя 13, сегмент 3: запрещенные снаряды, chroot-окружении, тюрьмах
[слайды] [видеолекция] [стенограмма]
 
неделя 13, 4 сегмента: Процесс приоритеты
[слайды] [видеолекция] [стенограмма]
 
неделя 13, участок 5: сходства процессора и процессора комплекты
[слайды] [видеолекция] [стенограмма]
 
неделя 13, Этап 6:
[слайды] [видеолекция] [стенограмма]
 
взлом корня.с
занят ребенок.с
нагрузки.с
приоритетом.с
mkchroot
2020-12-07 Обзор   Обзор

Заключительного задания Kahoot: sish(1)