Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
December 03 2024 02:18:42   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 34300
Учимся удалять!... 32284
Примеры, синони... 23599
Просмотр готовы... 22894
Декартовы коорд... 22593
FAST (методика ... 21630
содержание - се... 20947
Просмотр готовы... 19657
Работа с инстру... 15098
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
5.13 DUР
Системная функция dup копирует дескриптор файла в первое свободное место в таблице пользовательских дескрипторов файла, возвращая новый дескриптор пользователю. Она действует для всех типов файла. Синтаксис вызова функции:
newfd = dup(fd);
где fd — дескриптор файла, копируемый функцией, а newfd — новый дескриптор, ссылающийся на файл. Поскольку функция dup дублирует дескриптор файла, она увеличивает значение счетчика в соответствующей записи таблицы файлов — записи, на которую указывают связанные с ней точки входа в таблице файловых дескрипторов, которых теперь стало на одну больше. Например, обзор структур данных, изображенных на Рисунке 5.20, показывает, что процесс вызывает следующую последовательность функций: он открывает (open) файл с именем «/etc/passwd» (файловый дескриптор 3), затем открывает файл с именем «local» (файловый дескриптор 4), снова файл с именем «/etc/passwd» (файловый дескриптор 5) и, наконец, дублирует (dup) файловый дескриптор 3, возвращая дескриптор 6.
Рисунок 5.20. Структуры данных после выполнения функции dup
Возможно, dup — функция, не отличающаяся изяществом, поскольку она предполагает, что пользователь знает о том, что система возвратит свободную точку входа в таблице пользовательских дескрипторов, имеющую наименьший номер. Однако, она служит важной задаче конструирования сложных программ из более простых конструкционных блоков, что, в частности, имеет место при создании конвейеров, составленных из командных процессоров.
Рассмотрим программу, приведенную на Рисунке 5.21. В переменной i хранится дескриптор файла, возвращаемый в результате открытия файла «/etc/passwd», а в переменной j — дескриптор файла, возвращаемый системой в результате дублирования дескриптора i с помощью функции dup. В адресном пространстве процесса оба пользовательских дескриптора, представленные переменными i и j, ссылаются на одну и ту же запись в таблице файлов и поэтому используют одно и то же значение смещения внутри файла. Таким образом, первые два вызова процессом функции read реализуют последовательное считывание данных, и в буферах buf1 и buf2 будут располагаться разные данные. Совсем другой результат получается, когда процесс открывает один и тот же файл дважды и читает дважды одни и те же данные (раздел 5.2). Процесс может освободить с помощью функции close любой из файловых дескрипторов по своему желанию, и ввод-вывод получит нормальное продолжение по другому дескриптору, как показано на примере. В частности, процесс может «закрыть» дескриптор файла стандартного вывода (файловый дескриптор 1), снять с него копию, имеющую то же значение, и затем рассматривать новый файл в качестве файла стандартного вывода. В главе 7 будет представлен более реалистический пример использования функций pipe и dup при описании особенностей реализации командного процессора.
#include ‹fcntl.h›
main() {
int i, j;
char buf1[512], buf2[512];
i = open("/etc/passwd", O_RDONLY);
j = dup(i);
read(i, buf1, sizeof(buf1));
read(j, buf2, sizeof(buf2));
close(i);
read(j, buf2, sizeof(buf2));
}
Рисунок 5.21. Программа на языке Си, иллюстрирующая использование функции dup
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Введение
Бенчмаркинг процес...
Манчестерское коди...
3. SADT-технология...
6.6.2 Алгоритмы пр...
12.3.2 Реализация ...
12.6 УПРАЖНЕНИЯ
9.2.1.1 Функция fo...
ГЛАВА 6. СТРУКТУРА...
Video Logic DigiTh...
Другие возможные х...
Проверка правильно...
9.6. Межгрупповая ...
Присвоение наимено...
ДСМ-метод
Дифференциальный GPS
7.4 ОЖИДАНИЕ ЗАВЕР...
ГЛАВА 9. АЛГОРИТМЫ...
Глава 8. Acer n35
Быстрое продление ...
9.2 ПОДКАЧКА ПО ЗА...
Рабочая частота эх...
Глава четвертая
2.3.2.3 Факсимильн...
3.1 Основные типы ...
ПРЕДИСЛОВИЕ
Глава пятая
4.1.3 Освобождение...
4.1.1 Определение
7.3.3. Концепции, ...
FLS Silver, FLS Go...
ГЛАВА 6. ИСПОЛЬЗО...
Текст
10.3.1 Символьные ...
10.4.2 Анализ потоков
Введение
4.12.3.4 Структурн...
Глава 16. Raymarin...
2.1.1. Уровень 1 ...
Совместная работа ...
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009