Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
July 22 2026 04:24:20   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 36697
Учимся удалять!... 33481
Примеры, синони... 24592
Декартовы коорд... 24171
Просмотр готовы... 23973
FAST (методика ... 22679
содержание - се... 22059
Просмотр готовы... 21029
Работа с инстру... 16691
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 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
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Претензии пользова...
10.1.2.3 Read и Writе
11.2.3 Семафоры
TDK XS-iV Tremor M...
Настройка шрифта т...
Информационный дож...
10.3.2 Терминальны...
6.4.5 Копирование ...
3.1. Внутренняя с...
2.4.4 Линейные коды
6.2.1 Области
Топология “звезда”
4.12.3.4 Структурн...
Вместо заключения
Пройдусь по Абрико...
5.15 LINК
6. Продукции типа...
Просмотр готовых ч...
Путевые точки
11.5 ВЫВОДЫ
Каскадная коррекция
Принцип 4. Создава...
2.6.2.3 Формирован...
2.4.2 Логическое к...
Документированная ...
Настройки телефона...
История GeForce
3.3 МЕХАНИЗМ ПОИСК...
1. Назначение отве...
Глава 2. GARMIN ST...
Глава первая
Инструмент Отрезок...
Супертип
Обязательные атрибуты
5.4 Информационно...
Функциональный пример
2.1. Поведенческие...
Как показывать мод...
Глава вторая. СИЛ...
Синтаксис
Мини-чат
Вам необходимо залогиниться.

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