- •Введение
- •Лабораторная работа 1.
- •Регистрация пользователя в системе
- •Выход из системы
- •Выполнение простых команд
- •Группирование команд
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Литература
- •5.3. Задание для самостоятельной работы
- •5.4. Контрольные вопросы
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Задание для самостоятельной работы
- •Формат файла /etc/passwd
- •Формат файла /etc/shadow
- •Формат файла /etc/group
- •Создание нового пользователя
- •Переключение между пользователями
- •Файлы инициализации пользователей
- •Файлы, регламентирующие работу пользователей
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •9.3. Права доступа к каталогам
- •9.4. Смена прав доступа на файлы
- •9.5. Маска на вновь создаваемые файлы
- •9.6. Дополнительные атрибуты файла
- •9.7. Списки управления доступом
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •10.3. Метасимволы или шаблоны
- •10.4. История команд
- •10.5. Псевдонимы
- •10.6. Перенаправление ввода и вывода
- •10.7. Конвейеры
- •10.8. Приглашение ко вводу
- •10.9. Сценарии оболочки
- •10.10. Задания для самостоятельной работы
- •10.11. Контрольные вопросы
- •11.3. Системный вызов open()
- •11.4. Системный вызов read()
- •11.5. Системный вызов write()
- •11.6. Системный вызов lseek()
- •11.7. Системный вызов close()
- •11.8. Задания для самостоятельной работы
- •11.9. Контрольные вопросы
- •12.3. Системный вызов fork
- •12.4. Системный вызов exit
- •12.5. Системный вызов wait
- •12.6. Системный вызов exec
- •12.7. Системные вызовы наследования пользовательских дескрипторов файла
- •12.8. Задания для самостоятельной работы
- •12.9. Контрольные вопросы
- •13.3. Системный вызов signal
- •13.4. Системный вызов pause
- •13.5. Системный вызов alarm
- •13.6. Управление непредусмотренными событиями
- •13.7. Неименованные каналы
- •13.8. Именованные каналы
- •13.9. Задания для самостоятельной работы
- •13.10. Контрольные вопросы
- •Литература
- •Заключение
- •Учебное издание
- •Системное программирование Лабораторный практикум
10.11. Контрольные вопросы
Как осуществляется перенаправление ввода и вывода в Linux?
Опишите работу конвейера в Linux.
Что такое псевдонимы? Их преимущества и недостатки.
Опишите использование кавычек в Linux.
Опишите основные операторы в Linux.
ЛИТЕРАТУРА
1. Глас Г., Эйблс К. Unix для программистов и пользователей. / Г. Глас, К. Эйблс – СПб.: БХВ-Петербург, 2004. – 848 с.: ил.
ЛАБОРАТОРНАЯ РАБОТА 11.
СИСТЕМНЫЕ ВЫЗОВЫ ОПЕРАЦИЙ УПРАВЛЕНИЯ ФАЙЛАМИ
11.1. Цель работы
Целью работы является изучение системных вызовов, с помощью которых обеспечивается управление файлами в среде ОС UNIX.
11.2. Общие сведения об управлении файлами
Системные вызовы управления файлами позволяют манипулировать полной совокупностью обычных файлов, каталогами и специальными файлами, включая: файлы на дисках; терминалы; принтеры; файлы взаимодействия между процессами, такими как конвейеры и сокеты.
В большинстве случаев системный вызов open() служит для первоначального доступа или создания файла. Если open() выполняется успешно, он возвращает маленькое целое число, называемое дескриптором файла, которое используется в последующих операциях ввода/вывода с этим файлом. Если open() завершается с ошибкой, возвращается число -1. Когда процесс больше не нуждается в доступе к открытому файлу, он должен закрыть его, используя системный вызов close(). Все открытые файлы процесса автоматически закрываются, когда процесс заканчивается. Хотя это означает, что можно опустить явный вызов close(), лучшая практика программирования состоит в том, чтобы закрыть файлы явно.
Дескрипторы файла нумеруются последовательно, начиная с нуля. В соответствии с соглашением, первые три значения дескриптора файла имеют специальное значение, указанное в таблице 11.1.
Таблица 11.1
Значения дескрипторов файлов для стандартных каналов ввода/вывода
Значение |
Описание |
0 |
Стандартный ввод (stdin) |
1 |
Стандартный вывод (stdout) |
2 |
Стандартный канал ошибки (stderr) |
Например, библиотечная функция printf() всегда посылает свой вывод с помощью дескриптора файла 1, а scanf() всегда читает свой ввод через дескриптор файла 0.Когда ссылка на файл закрыта, его дескриптор освобождается и может быть повторно назначен последующим вызовом open(). Большинство системных вызовов ввода/вывода требуют дескриптор файла в качестве своего первого параметра, чтобы знать, с каким файлом работать.
Отдельный файл может быть открыт несколько раз и, таким образом, иметь несколько дескрипторов, связанных с ним. Каждый дескриптор файла имеет собственный частный набор свойств, которые не имеют никакого отношения к файлу:
Указатель файла, который записывает смещение в файле, когда тот читается или пишется. Когда дескриптор файла создан, его указатель файла помещается по умолчанию на смещение 0 в файле (первый символ). По мере того как процесс читает или пишет, указатель файла соответственно обновляется. Например, если бы процесс открыл файл и затем прочитал 10 байтов из него, указатель файла достиг бы позиции на смещении 10. Если бы процесс затем написал 20 байтов, байты со смещением 10 – 29 в файле были бы переписаны, и указатель файла достиг смещения 30.
Флаг, который указывает, должен ли дескриптор файла автоматически быть закрыт, если процесс выполняет exec().
Флаг, который указывает, должен ли весь вывод файла быть добавлен к концу файла.