Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

write — виконує запис у файловий дескриптор

 

#include <unistd.h>

#include <sys/types>

ssize_t write(int fd, void *buf, size_t nbytes)

 

fd - дескриптор

*buf - адреса буфера із записуваними даними

nbytes - кількість даних для запису

 

Повертає кількість записаних байт або -1 у разі помилки (код помилки - в змінній errno)

 

Системний виклик write записує nbytes байт з буфера buf у відкритий файл, який представлений дескриптором fd. Запис починається з поточної позиції у файлі, а після її закінчення поточна позиція зміщується на число записаних байт. У зухвалу програму повертається число байт, яке було записано або -1,если виникла помилка. Якщо файл був відкритий з прапором O_APPEND, то безпосередньо перед записом поточна позиція автоматично переміщатиметься в кінець файлу.

Виклик write застосовує техніку відкладеного запису. Суть її полягає в наступному. Насправді, виклик write не виконує запис на диск. Він просто переписує дані в буферний кеш ядра і закінчує свою роботу. Якщо виклик write закінчив свою роботу без помилки це означає, що з дескриптором файлу все гаразд, дані скопійовані і виконана перевірка, чи достатньо місця на диску. Пізніше, в більш відповідний для ядра момент, дані записуються на диск. Якщо який-небудь інший процес спробуєте прочитати ці дані до того, як вони будуть записані на диск, узяти їх можна з кеша. Таким чином, не відомо, в який момент часу дані фізично будуть записані у файл.

Техніка відкладеного запису має три проблеми:

1. невизначеності з часом фактичному запису даних на диск.

2. процес, що ініціював запис, не може бути проінформований про помилки, що виникли під час запису на диск. Насправді, буфери файлової системи не належать жодному з процесів — якщо декілька процесів намагаються записувати дані в одну і ту ж ділянку одного і того ж файлу, то їх дані потраплять в один і той же буфер.

3. фізичний порядок запису буферів не піддається регулюванню. Навіть якщо серія системних викликів write слідує в певному порядку, це не гарантує той же порядок запису буферів на диск.

 

Сучасні ОС уміють справлятися з цими проблемами і переважно мати виграш за часом, який дає відкладений запис.

Виклик write може також використовуватися для запису в канали, в спеціальні файли або в сокети, але в цих випадках він має деякі особливості. Найважливіша відмінність: у подібних застосуваннях виклик write може блокуватися, це означає, що запис припиняється до настання деякої події, наприклад звільнення місця для запису чергової порції даних. Якщо виклик write заблокований, він може бути перерваний сигналом, що поступив. В цьому випадку зухвалому процесу повертається -1 і код помилки EINTR в змінній errno.

 

2.4 Позіціонування у файлі

<== предыдущая лекция | следующая лекция ==>
Пример 11 | Общие тенденции развития философии ХХ века
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 634; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.