Нейл Мэтью - Основы программирования в Linux

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Нейл Мэтью - Основы программирования в Linux краткое содержание

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов

Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int fcntl(int fildes, int command, struct flock *flock_structure);

Структура flock(он англ. file lock ) зависит от конкретной реализации, но, как минимум, она будет содержать следующие элементы:

short l_type;

short l_whence;

off_t l_start;

off_t l_len;

pid_t l_pid.

Элемент l_typeпринимает одно из нескольких значений (табл. 7.1), определенных в файле fcntl.h.

Таблица 7.1.

Значение Описание
F_RDLCK Разделяемая или совместная блокировка (блокировка на чтение). У разных процессов может быть разделяемая блокировка одних и тех же (или перекрывающихся) участков файла. Если у какого-либо процесса есть разделяемая блокировка, ни один процесс не сможет установить исключительную блокировку этого участка. Для получения совместной блокировки файл должен быть открыт с правом на чтение или на чтение/запись
F_UNLCK Разблокировать. Применяется для снятия блокировок
F_WRLCK Исключительная блокировка (или блокировка на запись). Только один процесс может установить исключительную блокировку на любой конкретный участок файла. После того как процесс установил такую блокировку, никакой другой процесс не сможет установить блокировку любого типа на этот участок файла. Для установки исключительной блокировки файл должен быть открыт с правом на запись или на чтение/запись

Элементы l_whence, l_startи l_lenопределяют участок файла, непрерывную область в байтах. Элемент l_whenceдолжен задаваться одним из следующих значений: SEEK_SET, SEEK_CUR, SEEK_END(из файла unistd.h). Они соответствуют началу, текущей позиции или концу файла соответственно. Элемент l_whenceзадает смещение для первого байта участка файла, определенного элементом l_start. Обычно оно задается константой SEEK_SET, поэтому l_startотсчитывается от начала файла. Параметр l_lenсодержит количество байтов в участке файла.

Параметр l_pidприменяется для указания процесса, установившего блокировку; см. следующее далее описание значения F_GETLKпараметра command.

Для каждого байта в файле может быть установлена блокировка только одного типа в каждый конкретный момент времени и может быть либо разделяемой блокировкой, либо исключительной или блокировка может отсутствовать. Для системного вызова fcntlсуществует совсем немного комбинаций значений команд и вариантов, поэтому рассмотрим их все по очереди.

Значение F_GETLK параметра command

Первое значение параметра command — F_GETLK. Эта команда получает информацию о файле, который открыт fildes(первый параметр в вызове). Она не пытается блокировать файл. В процессе вызова передаются сведения о типе блокировки, которую хотелось бы установить, и вызов fcntlс командой F_GETLKвозвращает любую информацию, которая могла бы помешать установке блокировки.

Значения, используемые в структуре flock, приведены в табл. 7.2.

Таблица 7.2

Значение Описание
l_type Или F_RDLCKдля разделяемой (только чтение) блокировки, или F_WRLCKдля исключительной (на запись) блокировки
l_whence Одно из значений: SEEK_SET, SEEK_CURили SEEK_END LCK
l_start Начальный байт интересующего вас участка файла
l_len Количество байтов в интересующем вас участке файла
l_pid Идентификатор процесса, удерживающего блокировку

Процесс может применять вызов с командой F_GETLKдля определения текущего состояния блокировки участка файла. Он должен настроить структуру flock, указав тип требуемой блокировки и определив интересующую его область файла. Вызов fcntlвозвращает в случае успешного завершения значение, отличное от -1. Если у файла уже есть блокировки, препятствующие установке требуемой блокировки, структура flockобновляется соответствующими данными. Если блокировке ничто не мешает, структура flockне изменяется. Если вызов с командой F_GETLKне может получить информацию, он возвращает -1 для обозначения аварийного завершения.

Если вызов с командой F_GETLKзавершился успешно (т. е. вернул значение, отличное от -1), вызвавшее его приложение должно проверить, изменено ли содержимое структуры flock. Поскольку значение l_pidсодержит идентификатор блокирующего процесса (если таковой найден), это поле очень удобно для того, чтобы проверить, изменялась ли структура flock.

Значение F_SETLK параметра command

Эта команда пытается заблокировать или разблокировать участок файла, заданного fildes. В табл. 7.3 приведены значения полей структуры flock(отличающиеся от значений, применяемых командой F_GETLK).

Таблица 7.3

Значение Описание
l_type Одно из следующих: • F_RDLCK— для разделяемой или допускающей только чтение блокировки; • F_WRLCK— для исключительной или блокировки записи; • F_UNLCK— для разблокирования участка
l_pid Не используется

Как и в случае F_GETLK, блокируемый участок определяется значениями элементов l_start, l_whenceи l_lenструктуры flock. Если блокировка установлена, вызов fcntlвернет значение, отличное от -1, при аварийном завершении возвращается -1. Вызов завершается немедленно.

Значение F_SETLKW параметра command

Команда F_SETLKWаналогична команде F_SETLKза исключением того, что при невозможности установки блокировки вызов будет ждать до тех пор, пока такая возможность не представится. После перехода в состояние ожидания вызов завершится только, когда блокировка будет установлена или появится сигнал. Сигналы мы обсудим в главе 11.

Все блокировки файла, установленные программой, автоматически очищаются, когда закрывается соответствующий дескриптор файла. То же самое происходит, когда программа завершается.

Применение вызовов read и write при наличии блокировки

Когда вы применяете блокировку участков файла, очень важно использовать для доступа к данным низкоуровневые вызовы readи writeвместо высокоуровневых функций freadи fwrite. Это необходимо, поскольку функции freadи fwriteвыполняют внутри библиотеки буферизацию читаемых или записываемых данных, так что при выполнений вызова freadдля считывания 100 байтов из файла может быть (и на самом деле почти наверняка будет), считано более 100 байтов, и дополнительные данные помещаются во внутрибиблиотечный буфер. Если программа применит функцию freadдля считывания следующих 100 байтов, она на самом деле считает данные из буфера и не разрешит низкоуровневому вызову readизвлечь больше данных из файла.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы программирования в Linux отзывы


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x