Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » _syscalls_ sem10 - Интерфейс библиотечных функций и системных вызовов. Работа с файлами. Работа с файловой системой

_syscalls_ sem10 - Интерфейс библиотечных функций и системных вызовов. Работа с файлами. Работа с файловой системой (Мини-учебник с ejudge = Чернокнижка), страница 2

PDF-файл _syscalls_ sem10 - Интерфейс библиотечных функций и системных вызовов. Работа с файлами. Работа с файловой системой (Мини-учебник с ejudge = Чернокнижка), страница 2 Практика расчётов на ПЭВМ (37192): Книга - 3 семестр_syscalls_ sem10 - Интерфейс библиотечных функций и системных вызовов. Работа с файлами. Работа с файловой системой (Мини-учебник с ejudge = Чернокниж2019-05-08СтудИзба

Описание файла

Файл "_syscalls_ sem10 - Интерфейс библиотечных функций и системных вызовов. Работа с файлами. Работа с файловой системой" внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 2 страницы из PDF

Никакогодополнительного структурирования не производится. Некоторые файлы могут допускать позиционирование на любое место в файле, другие файлы допускают только последовательноечтение из файла или запись в файл.Процесс может работать с файлом посредством файлового дескриптора. Файловый дескриптор — это небольшое неотрицательное целое число, которое уникально в пределахданного процесса. Три первых файловых дескриптора имеют специальное назначение. Файловый дескриптор с номером 0 — это стандартный ввод процесса, 1 — стандартный выводпроцесса, 2 — стандартный поток ошибок. Многие программы считывают данные со стандартного ввода, выводят результат на стандартный вывод, а сообщения об ошибках печатают на стандартный поток ошибок.

Стандартный ввод обычно связан с входным буферомтерминала, а стандартный вывод и стандартный дескриптор ошибок — с выходным буфером терминала. Это стандартное соглашение о назначении файловых дескрипторов, тем неменее, может произвольным образом нарушаться. Например, все стандартные дескрипторымогут быть вообще закрыты.Файловые дескрипторы всегда наследуются при создании нового процесса (системныйвызов fork) и, как правило, наследуются при запуске новой программы с помощью системного вызова execve.

Программист может запретить наследование файлового дескрипторапри вызове execve, пометив его флагом FD_CLOEXEC. Для этого используется системныйвызов fcntl. Под наследованием в данном случае понимается то, что новому процессу (иливновь запущенной программе) будет доступен файловый дескриптор с тем же самым номером, ассоциированный с тем же самым файлом и разделяющий позицию чтения и записи вфайле.32.1 Открытие файлаДля открытия нового файла используется системный вызов open. Обратите внимание,что он может использоваться как с двумя, так и с тремя аргументами. Третий аргумент обязательно должен быть указан, если во флагах присутствует бит O_CREAT.#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);Первый параметр задаёт путь к файлу, который нужно открыть.

Второй параметр определяет режим, в котором будет открыт файл, а третий параметр задаёт права доступа в случае,когда файл создаётся. Файл может быть открыт в одном из трёх режимов: только чтение(O_RDONLY), только запись (O_WRONLY) и чтение и запись (O_RDWR). Попытка выполнитьоперацию, которая не предусмотрена режимом открытия файла, вызовет ошибку соответствующего системного вызова. Кроме режима работы с файлом в параметре flags можноуказать флаг создания файла O_CREAT, который вызовет создание нового пустого файла,если файл с таким именем ещё не существует. Флаг O_EXCL, который может использоваться только вместе с O_CREAT, задаёт, что системный вызов должен завершиться с ошибкойс кодом EEXIST, если такой файл уже существует. Этот флаг может применяться для простейшей синхронизации процессов, как будет описано в дальнейшем. Флаг O_TRUNC задаёт,что старой содержимое файла (если оно было) должно быть уничтожено.

Флаг O_APPENDзадаёт, что перед каждой записью в файл указатель должен позиционироваться на конецфайла.Флаг O_NONBLOCK (другое название — O_NDELAY) указывает, что операции с файловымдескриптором никогда не должны приводить к блокировке выполнения процесса. Например,если файловый дескриптор ассоциирован с терминалом, и пользователь не ввёл ни одного символа, то системный вызов read при использовании неблокирующего режима чтениязавершится с ошибкой EAGAIN.Когда файл открывается на сетевой файловой системе NFS, не все флаги открытия могуткорректно работать. Например, использование флага O_EXCL может не дать ожидаемогоэффекта, то есть файловый дескриптор может в некоторых ситуациях быть получен, дажеесли такой файл уже создан.

Это связано с особенностями протокола NFS 1 . Точно такжена файловой системе NFS невозможно корректно реализовать флаг добавления O_APPEND,поэтому, если одновременно несколько процессов записывают в один файл, это может привести к искажению содержимого файла. Конечно же, эти проблемы не проявляют себя вобычной практике, когда файл открывает и с ним работает единственный процесс, находящийся на единственном компьютере.При создании нового файла, то есть когда указывается флаг O_CREAT, необходимо задать права доступа к создаваемому файлу — параметр mode. В этом параметре используются только 12 младших бит, определяющие права доступа для владельца, группы, прочихпользователей и специальные флаги (например, флаг suid). Права с которыми в действительности будет создан файл ещё зависят от маски создания файлов процесса umask. Еслиperms — это права доступа к создаваемому файлу, это значение может быть вычислено поформуле perms = mode & ~umask.

Другими словами, у параметра mode сбрасываются1 Протокол NFS специально проектировался как протокол без состояний, чтобы авария сервера не сказыва-лась на работе клиентов. Как показала практика, это оказалось ошибочным решением.4те биты, которые установлены в маске создания файлов процесса.Системный вызов open возвращает номер файлового дескриптора открытого файла,причём всегда выбирается наименьший незанятый номер файлового дескриптора.

Если открытие файла невозможно, системный вызов возвращает число -1, а переменная errno будет содержать код ошибки. Возможные коды ошибок для open можно посмотреть в приложении.Когда файл открывается на запись, наиболее часто используется комбинация режимовоткрытия O_WRONLY | O_CREAT | O_TRUNC, означающая, что файл открывается в режиме «только запись», если файл не существовал, он будет создан, а если он существовал,его старое содержимое будет уничтожено.

Чтобы в таких случаях не задавать эти режимыоткрытия, предусмотрена функция creat, которая в точности эквивалентна системному вызову open с указанными выше режимами.2.2 Закрытие файлаКогда процесс завершает работу (в результате вызова _exit, exit или при получениисигнала) все открытые файловые дескрипторы закрываются автоматически. Тем не менее,файловые дескрипторы, которые больше не используются, необходимо закрывать.

Каждыйпроцесс имеет ограничение на количество одновременно открытых файловых дескрипторов(это ограничение можно узнать с помощью команд ulimit -a или ulimit -n). Если процесс исчерпал ресурс свободных файловых дескрипторов, открытие файла завершится сошибкой EMFILE. Кроме того, незакрытые файловые дескрипторы могут привести к тому,что созданные новые процессы будут работать неправильно, например, никогда не завершатся.Для закрытия открытого файлового дескриптора используется системный вызов close.#include <unistd.h>int close(int fd);Единственным параметром передаётся номер закрываемого файлового дескриптора.Функция возвращает 0 при нормальном завершении и -1 при ошибке. Если файл былоткрыт на запись, система может использовать внутреннюю буферизацию для увеличенияэффективности работы с внешними устройствами.

В этом случае при вызове close системапопытается сохранить буферизованные данные на внешнем устройстве, и, если при этомвозникнет ошибка ввода/вывода, она будет сообщена пользователю. Поэтому игнорирование кода возврата функции close может привести к незамеченной потере данных, особеннокогда используется сетевая файловая система NFS в сочетании с квотированием диска.Системным вызовом close может закрываться файловый дескриптор, полученный излюбого источника: системных вызовов open, socket, dup.2.3 Работа с файловым дескрипторомРассмотрим системные вызовы, позволяющие работать с файлом, ассоциированным сфайловым дескриптором: считывать и записывать данные, позиционировать указатель текущей позиции.2.3.1 ЧтениеДля чтения данных по файловому дескриптору используется системный вызов read.5#include <unistd.h>ssize_t read(int fd, void *buf, size_t count);Здесь тип size_t — это тип, который используется в библиотеке языка Си дляразмера объектов.

На 16- и 32-битных машинах этот тип, как правило, эквивалентенunsigned long int. Тип ssize_t — «размер со знаком». На 16- и 32-битных машинахэто, как правило, long int.Параметр fd задаёт номер файлового дескриптора, из которого должно производитсячтение. Файловый дескриптор должен быть открыт и должен допускать чтение, в противном случае read завершится с ошибкой. Параметр buf задаёт начальный адрес памяти,по которому должны быть размещены считанные данные, а параметр count — максимальный размер считываемых данных (в байтах).

Если блок памяти, заданный параметрами bufи count, полностью или частично находится вне адресов памяти, доступных процессу длязаписи, read завершится с ошибкой EFAULT 2 . Системный вызов read считывает не более чем count байт, и это число возвращается в качестве результата. Если в файловом дескрипторе выполняется условие «конец файла», системный вызов read возвращает 0. Приошибке возвращается -1, а переменная errno устанавливается в код ошибки.

Когда данные, немедленно доступные для чтения, отсутствуют, процесс, как правило, погружается системой в сон до тех пор, пока данные не появятся.Детали работы с файловым дескриптором: когда считывается count, а когда меньше чемcount байт, когда наступает «конец файла» — зависят от того, с чем ассоциирован файловый дескриптор. Если файловый дескриптор ассоциирован с регулярным файлом, то естьс файлом, блоки данных которого действительно размещаются на диске, системный вызовread ведёт себя следующим образом: считывается count байт, если размер непрочитаннойчасти файла больше count, считывается столько байт, каков размер непрочитанной частибайт, если она меньше count, наконец, возвращается 0, когда непрочитанных данных неосталось.2.3.2 ЗаписьСистемный вызов write позволяет записать данные в файл.#include <unistd.h>ssize_t write(int fd, void *buf, size_t count);Параметр fd задаёт номер файлового дескриптора.

Файловый дескриптор должен бытьоткрыт и должен допускать запись, в противном случае write завершится ошибочно. Параметр buf задаёт начальный адрес памяти, по которому размещаются записываемые данные,а параметр count — размер записываемых данных (в байтах). Если блок памяти, заданныйпараметрами buf и count, полностью или частично находится вне адресов памяти, доступных процессу для чтения, write завершится с ошибкой EFAULT.write пытается записать в файл заданное количество байт и возвращает, сколько байт вдействительности было записано. При ошибке возвращается -1, а переменная errno устанавливается в код ошибки (возможные коды ошибок приведены в приложении).

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5288
Авторов
на СтудИзбе
417
Средний доход
с одного платного файла
Обучение Подробнее