Здавалка
Главная | Обратная связь

Системний виклик pipe.



 

#include <unistd.h>   int pipe (fildes) int fildes [2];

Системний виклик pіpe створює механізм вводу/виводу, який називається неіменованим каналом, і повертає два дескриптори файлу fіldes[0] і fіldes[1]. Дескриптор fіldes[0]відкритий на читання, дескриптор fіldes[1] – на запис.

Канал буферизує до 5120 байт даних; запис у нього більшої кількості інформації без зчитування призведе до блокування пишучого процесу. За допомогою дескриптора fіldes[0]інформація читається в тому ж порядку, у якому вона записувалася за допомогою дескриптора fіldes[1].

Системний виклик pіpe завершується невдачею, якщо виконана хоча б одна з наступних умов:

- Перевищується максимальна кількість файлів, відкритих одночасно в одному процесі.

- Переповнено системну таблицю файлів.

При успішному завершенні результат дорівнює 0; у випадку помилки повертається -1, а змінній errno присвоюється код помилки.

 

11. Системний виклик write.

#include <unistd.h>   int write (fildes, buf, nbyte) int fildes; char *buf; unsigned nbyte;

Системний виклик wrіte призначений для здійснення потокових операцій виводу (запису) інформації над каналами зв'язку, що описуються файловими дескрипторами, тобто для файлів,pіpe, FІFO і socket.

Аргумент fіldes - це дескриптор створеного раніше потокового каналу зв'язку, через який буде відсилатися інформація, тобто значення, що повернув один із системних викликів creat(2), open(2), dup(2), fcntl(2), pіpe(2) чи socket().

Параметр nbytes для системного виклику wrіte визначає кількість байт, що повинний бути переданий, починаючи з адреси пам'яті buf.

Особливості поведінки при роботі з файлами:

При роботі з файлами інформація записується в файл, починаючи з місця, обумовленого покажчиком поточної позиції у файлі. Значення покажчика збільшується на кількість реально записаних байт.

 

12. Системний виклик read.

#include <unistd.h>   int read (fildes, buf, nbyte) int fildes; char *buf; unsigned nbyte;

Системний виклик read призначений для здійснення потокових операцій вводу (читання) інформації над каналами зв'язку, що описуються файловими дескрипторами, тобто для файлів,pіpe, FІFO і socket.

Аргумент fіldes - це дескриптор створеного раніше потокового каналу зв'язку, через який буде прийматись інформація, тобто значення, що повернув один із системних викликів creat(2), open(2), dup(2), fcntl(2), pіpe(2) чи socket().

Системний виклик read намагається прочитати nbyte байт із файлу, асоційованого з дескриптором fіldes, у буфер, покажчиком на який є аргумент buf.

При успішному завершенні системного виклику read повертається кількість реально прочитаних байт; ця кількість може бути менша значення аргументу nbyte, якщо файл асоційований з лінією зв'язку або якщо кількість байт, що залишилися у файлі, менша значення аргументу nbyte.

13. Системний виклик close.

#include <unistd.h>   int close (fildes) int fildes;

Системний виклик close призначений для коректного завершення роботи з файлами і іншими об'єктами вводу/виводу, що описуються в операційній системі через файлові дескриптори:pіpe, FІFO, socket.

Аргумент fіldes - це дескриптор файлу, отриманий після виконання системних викликів creat(2), open(2), dup(2), fcntl(2), pіpe(2) або socket.

Системний виклик close закриває цей дескриптор. Останній виклик close для файлу, зв'язаного з дескриптором fіldes, приводить до ліквідації потоку.

При успішному завершенні результат дорівнює 0; у випадку помилки повертається -1, а змінній errno присвоюється код помилки.

 

14. Системний виклик mknod.

 

#include <sys/stat.h> #include <unistd.h> int mknod (path, mode, dev) char* path; int mode; int dev;

Системний виклик mknod створює новий файл із маршрутним ім'ям, на яке вказує аргумент path. Тип і права доступу до нового файлу визначається аргументом mode (побітове OR типу і прав доступу).

Розглянемо деякі типи файлів які створюються системним викликом mknod:

Тип Oct Hex Призначення
S_IFIFO 0x1000 Спеціальний іменований канал.
S_IFCHR 0x2000 Спеціальний символьний файл.
S_IFBLK 0x6000 Спеціальний блочний файл.
S_IFREG 0x8000 0x0000 Звичайний файл.
       

Якщо mknod визначає спеціальний блочний чи символьний файл, то аргумент dev задає залежну від конфігурації системи специфікацію блочного чи символьного пристрою вводу/виводу; у іншому випадку аргумент dev ігнорується. Таким чином параметр dev є несуттєвим у нашій ситуації, і ми будемо завжди задавати його рівним 0.

При успішному завершенні системного виклику результат дорівнює 0; у випадку помилки поверта

ється -1, а змінній errno присвоюється код помилки.

 

15. Системний виклик mkfifo.

#include <sys/stat.h> #include <unistd.h>   int mkfifo (path, mode) char* path; int mode;

Системний виклик mkfifoстворює новий спеціальний FIFO файл (іменований канал) із маршрутним ім'ям, на яке вказує аргумент path. Права доступу до нього визначається аргументом mode і трактуються як у системному виклику open.

При успішному завершенні результат дорівнює 0; у випадку помилки повертається -1, а змінній errno присвоюється код помилки.

 

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.