Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_ГОС_2.doc
Скачиваний:
1
Добавлен:
26.08.2019
Размер:
1.88 Mб
Скачать

Список литературы

  1. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - Спб.: Питер, 2001. - 464 с.

  2. Пратта С. Язык программирования С++. Лекции и упражнения - М.: Диа-Софт, 2003. - 656 с.

  3. Страуструп Б. Дизайн и эволюция языка C++. Объектно-ориентированный язык программирования. - М.: ДМК-Пресс, 2000. - 448с.

  4. Шилд Г. С/С++. Справочник программиста - М.: Вильямс, 2000. - 448 с.

  5. Шмидский Я.К. Программирование на языке С/С++ - М.: Диалектика, 2003. - 352 с.

Дисциплина «Системное программирование»

Теоретические вопросы

1. Операционные системы: история

2. Операционные системы: назначение и основные функции

3. Управление процессами в операционных системах

4. Конкуренция процессов

5. Базовые примитивы доступа к файлам

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 2.

6. Системные вызовы идентификации пользователей и права доступа

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 3.

7. Файлы с несколькими именами

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 3.

8. Каталоги, файловые системы и специальные файлы

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 4.

9. Базовые примитивы для работы с процессами

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 5.

10. Обработка сигналов в UNIX

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 6.

11. Примитивы межпроцессного взаимодействия: программные каналы

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 7.

12. Дополнительные средства межпроцессного взаимодействия в UNIX

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 8.

13. Системные вызовы управления терминалом

Литература:

Хэвиленд К., Грэй Д., Салама Б. Системное программирование в UNIX. Руководство программиста по разработке ПО: Пер. с англ. – M., ДМК Пресс, 2000. – 368 с. – глава 9.

Задачи

Экзаменационные задачи делятся на две группы: задачи на работу с файлами и задачи на работу с процессами. При выполнении задач первого типа необходимо использовать материал глав 1–4 книги [3], при выполнении задач второго типа необходимо использовать материал глав 5–9 книги [3]. В ряде случаев может потребоваться совместное использование системных вызовов для работы с файлами и процессами.

Задача 1 типа. Создайте файл newfile в текущем каталоге:

Решение:

#include <stdlib.h>

#include <fcntl.h>

#define PERMS 0644 /* Права доступа при открытии с O_CREAT */

char *filename="newfile";

main()

{

int filedes;

if((filedes = open (filename, O_RDWR|O_CREAT, PERMS)) == -1)

{

printf("Невозможно создать %s\n",filename);

exit(1); /* Выход по ошибке */

}

/* Остальная программа */

exit(0);

}

Задача 2 типа. Используйте вызов execl для запуска программы вывода содержимого каталога ls.

Решение:

#include <unistd.h>

main()

{

printf("Запуск программы ls\n");

execl("/bin/ls", "ls", "-l", (char*)0);

/* Если execl возвращает значение, то вызов был неудачным */

perror ("Вызов execl не смог запустить программу ls");

exit(1);

}

14. Напишите аналог команды ls -l

15. Напишите «часы», выдающие текущее время каждые 3 секунды

16. Напишите программу, которая ожидает ввода с клавиатуры в течение 10 секунд. Если ничего не введено – печатает «Нет ввода», иначе – печатает «Спасибо»

17. Используя файловую систему /proc, получите информацию об открытых всеми процессами файлах

18. Напишите функцию mysleep(n), задерживающую выполнение программы на n секунд. Воспользуйтесь системным вызовом alarm(n) (будильник) и вызовом pause(), который задерживает программу до получения любого сигнала. Предусмотрите рестарт при получении во время ожидания другого сигнала, нежели SIGALRM. Сохраняйте заказ alarm, сделанный до вызова sleep (alarm выдает число секунд, оставшееся до завершения предыдущего заказа)

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

20. Создайте аналог команды df