файлов дескриптор

Файл ЕВРОВОК - това е положително цяло, като се използва процес, за да отворите файла. Брой на описания на файлове, достъпни за процес е ограничен от параметър / OPEN_MAX, разположен в сис / limits.h файл. В допълнение, броят на описания на файлове може да се настрои с помощта на ulimit -н команда флаг. Описания на файлове са отворени при изпълнение на функциите. тръба. Записът е създаден и fcntl. Обикновено, всеки процес работи с уникален набор от дескриптори. Въпреки това, тези маркери могат да се използват и от деца процеси създадени с помощта на вилица функция. В допълнение, дескрипторите могат да бъдат копирани, използвайки Fontal функции. мезонети и dup2.







Всички открити файлове се отнасят до мозъка на костите чрез така наречените файлови дескриптори. Файл ЕВРОВОК - това е неотрицателно число. Когато отворите съществуващ файл и да създадете нов файл, ядрото се връща процес на файлов дескриптор.

Начално UNIX -shelly асоциирано файлов дескриптор 0 до стандартния вход на процеса (терминал), файлов дескриптор 1 - стандартния изход (терминал) и файлов дескриптор 2 - стандартната грешка (т.е., където се показва грешките). Това споразумение се наблюдава от много UNIX -shellami и много приложения - и в никакъв случай не е част от ядрото.

POSIX.1 заменя стандартните "магически числа" 0,1,2 символични константи STDIN_FILENO, STDOUT_FILENO и STDERR_FILENO съответно.

Описания на файлове могат да се стойности от 0 до OPEN_MAX. По-старите версии на UNIX имат горна граница до 19, което позволява на един процес, за да се отвори до 20 файлове. Сега, тази стойност се увеличава до няколко хиляди.

File дръжки служат като индекс ЕВРОВОК маса, която се намира в u_block и създаде ядрото на всеки процес. Най-често този процес получава дескрипторите от операциите отворени и създавам. и наследява от процеса на родител. По време на работа вилица ЕВРОВОК маса се копира в процеса на дете. В резултат на процеса на дете получава право на достъп до файловете на процеса на родител.

файлов дескриптор маса и на системата маси отворени файлове

структура на данните, съдържаща списък на отворените файлове и списъка на описания на файлове, които ви позволяват да следите достъп до файлове и да се гарантира целостта на данните.

Таблица на ЕВРОВОК файлове

Превежда индексен номер (файлов дескриптор) в указателите за отваряне на файлове. За всеки процес в u_block създаде своя собствена маса от ЕВРОВОК. Всеки запис на тази таблица съдържа следните полета: флаговете и показалеца на файл. Не повече от описания на файлове OPEN_MAX. таблицата на файлов дескриптор има следната структура:

Таблица за отваряне на файлове

Той съдържа записи с информация за всички отворени файлове. Влизането на тази таблица се поддържа текущото отместване за файла, който се използва за всички да четат и пишат операции във файл и отворете файла (O_RDONLY, O_WRONLY или O_RDWR). В структурата на таблицата на отворените файлове, съхранявани в показалеца на файл офсет. Когато операцията по четене и запис, системата извършва имплицитно показалка смяна. Например, когато се чете или записва байта х показалка също ще се премести в х байта. За да промените позицията на курсора във файлове с директен достъп се прилага потърси функция. За стрийминг файлове (например тръби и контакти), концепцията за изместване не се поддържа, като случаен достъп до преписката не е така.







Управление дескриптори файлове

Тъй като файловете могат да се справят множество потребители, е необходимо да се позволи на свързаните процеси с общ обем на показалеца и независими процеси - със собствен компенсира указател към файл. Записът в отворен файл таблица съдържа референтен файл брой отразяваща броя на описания, съответстващи на даден файл.

Множество препратки към файла може да се изисква в следните случаи:

  • Файлът се отваря дори един-единствен процес
  • Процесът на детето наследява описания на файлове, открити от процеса на родител
  • файлов дескриптор се копира с помощта на функцията fcntl или DUP

Съвместната работа с отваряне на файлове

На всяка стъпка на откриване на записа добавен към таблицата на отворените файлове. Това гарантира, че всеки процес да работи с показалеца във файла. Такъв подход позволява да се запази целостта на данните.

При копиране на част от описание на два процеса започват да работят с един и същ индекс. В този случай и двата процеса могат да се опитат да има достъп до файла в същото време, данните ще бъдат прочетени или записани не съответства.

Има следните начини за копиране дескриптора на файла: DUP на функция или dup2. вилица функция и fcntl на функция.

Функции мезонети и dup2

мезонети, функция създава копие на дескриптора на файла. Копието се генерира в празното пространство в ЕВРОВОК таблицата с потребителското файл, съдържащ източник дескриптора. А DUP стъпки референтния Брой на файла в записа на отворен файл маса и връща нов файлов дескриптор. dup2 функция намира исканото дръжката и затваря свързан файл, ако е отворен. С негова помощ, можете да посочите конкретен запис от таблицата, в която дръжката трябва да се копира.

Функцията вилица

Функцията вилица създава дъщерен процес, който наследява всички дръжките в процеса на родител. След това процесът на детето започва нов процес. Наследен описания флаг близо с EXEC, създаден с fcntl. Те ще бъдат затворени.

fcntl функция

fcntl функция ви позволява да работите с структурата на данните на дескрипторите на и отворете файла с. Тя ви позволява да направите следното ЕВРОВОК:
  • Копирайте дескриптора на файла (идентичен с мезонети, функцията).
  • Вземи или да зададете стойност от края на знамето на Изп.
  • Дескриптори изключен режим за блоковете.
  • Включително допълнение на данни в режим на файла (O_APPEND).
  • Да включва изпращането на процесите на входно-изходна разделителна способност.
  • Задайте и да получите ID процес или процес групата, за да изпратите SIGIO.
  • Затворете всички описания на файлове.

Стандартни описания на файлове

Когато стартирате програмата в черупката отваря три описания на 0, 1 и 2. По подразбиране, те са свързани със следните файлове:

Стандартни съобщения за грешки.

Тези описания на файлове, свързани с терминала. Това означава, че при четене на данни от файл ЕВРОВОК 0 програма получава команда от терминала, а когато данните се записват в описания на файлове 1 и 2, те се показват на терминала. Когато отворите други файлови дескриптори са назначени във възходящ ред.

Ако достъпът се пренасочва чрез операторите <(знак меньше) или> (По-голямо), стандартните описания, свързани с други файлове. Така например, следната команда свързва файлови дескриптори 0 и 1, необходими файлове (по подразбиране, тези описания са свързани с терминала).

В този пример, описание 0 ще бъде свързан с даден файл FileX, и дръжка 1 - с Filey файла. Descriptor 2 няма да се промени. Програмата е достатъчно, за да се знае, че дръжката е 0 входния файл, както и описания на 1 и 2 - на изходните файлове. Информация за това, което определени файлове, свързани с тези тагове, тя не се нуждае.

Следният пример показва стандартната програма изход пренасочване:

При получаване на искането за дескриптора се разпределя първата свободна ЕВРОВОК на масата за ЕВРОВОК (ЕВРОВОК с най-малък номер). Въпреки това, функциите на DUP файлове могат да бъдат отнесени към нито дръжка.

Ограничаването на броя на описания на файлове