Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СистПриклПрогЗабез(Хихловская).doc
Скачиваний:
25
Добавлен:
10.02.2016
Размер:
961.02 Кб
Скачать

Размер канала

В канале может находиться только определенное число байтов, прежде чем следующий вызов write будет заблокирован. Минимальный размер, определенный POSIK равен 512 байтов. Вызов write выполняется для канала неделимыми порциями и запись выполняется ядром за одну непрерывную операцию. Родительский выполняется в бесконечном цикле, а дочерний посылает сообщение родительскому, спрашивая канал и проверяя, поступили ли данные. Системный вызов fcntl устанавливает флаги F_SETFL и O_NONBLOCK

Функции к разделу fifo

  1. Функция pipe(2)(создание канала)

Функция pipe(2) служит для создания однонаправленного (симплексного) канала (анонимного) обмена данными между двумя родственными процессами, т.к. только они имеют возможность получить доступ к одному и тому же каналу. После завершения работы канал уничтожается.

Функция имеет вид:

# include <unistd.h>

int pipe (int fildes[2]);

Функция возвращает два fd в массиве [ ], причем fildes[0] служит для чтения данных из канала, а fildes[1] для записи данных в канал.

  1. Функция fcntl(2)( управление файловыми операциями в уже открытых файлах, заданных дескриптором файла filedes)

# include <fcntl/h> - в этом заголовочном файле определены целочисленные константы: O_RDONLY и O_WRONLY.

int fcntl (int fildes, int cnd,…) – установка и снятие блокировки на файл его часть, создание каналов FIFO.

Функция fcntl(2) выполняет действие cmd с файлом , а третий аргумент зависит от конкретного действия:

а). F_SETLK – установить блокирование записи файла. Структура flock описывает блокирование, и указатель на нее передается в качестве третьего аргумента. При невозможности блокирования fcntl(2) возвращается с ошибкой EACCESS или EAGAIN;

б)F_SETLKW – аналогично предыдущему, но при невозможности блокирования по причине уже существующих блокировок, процесс переходит в состояние сна, ожидая снятие блокировок.

W – ждать;

в). F_SETFL – задает режим записи данных в конец файла.

  1. Функция printf – запись в стандартный вывод, форматизованный

  2. Системный вызов unlink(2)удаляет файл, например, unlink(/tmp/usedfile).

Вызов возвращает 0 в случае успешного завершения и – 1 – в случае ошибки.

  1. Системный вызов readкопирует произвольное число символов или байтов из файла в буфер ( в ASCII)

  2. Системный вызов openоткрывает файл для чтения, записи или создает пустой файл.

  3. Системный вызов close – закрывает файл, возвращает файл в случае успешного завершение и – 1 в случае ошибки:

# include <unistd.h>

int close (int filedes)

filedes=open (file,O_RDONLY);

.

.

.

close(filedes);

  1. Системный вызов write – копирует данные из буфера программы, рассматриваемого как массив, во внешний файл. Как и read, имеет три аргумента: дескриптор файла filedes, указатеь на записываемые данные buffer и n – положительное число записываемых байтов.

# include <unistd.h>

ssize_t write (int filedes, const void *buffer,size_t n);

  1. Функция pipe(2)(создание канала)

Функция pipe(2) служит для создания однонаправленного (симплексного) канала (анонимного) обмена данными между двумя родственными процессами, т.к. только они имеют возможность получить доступ к одному и тому же каналу. После завершения работы канал уничтожается.

Функция имеет вид:

# include <unistd.h>

int pipe (int fildes[2]);

Функция возвращает два fd в массиве [ ], причем fildes[0] служит для чтения данных из канала, а fildes[1] для записи данных в канал.