Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.практикумСП.doc
Скачиваний:
39
Добавлен:
31.03.2015
Размер:
5.99 Mб
Скачать

10.11. Контрольные вопросы

  1. Как осуществляется перенаправление ввода и вывода в Linux?

  2. Опишите работу конвейера в Linux.

  3. Что такое псевдонимы? Их преимущества и недостатки.

  4. Опишите использование кавычек в Linux.

  5. Опишите основные операторы в 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().

  • Флаг, который указывает, должен ли весь вывод файла быть добавлен к концу файла.