Главная » Просмотр файлов » Т.В. Руденко - Сборник задач и упражнений по языку Си

Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 15

Файл №1114664 Т.В. Руденко - Сборник задач и упражнений по языку Си (Т.В. Руденко - Сборник задач и упражнений по языку Си) 15 страницаТ.В. Руденко - Сборник задач и упражнений по языку Си (1114664) страница 152019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 15)

Если создается новыйфайл, то он получает полномочия perms; если файл уже существует, тоего владелец и полномочия остаются прежними, однако длина файластановится нулевой ( старое содержимое файла теряется ).В системе UNIX с каждым файлом ассоциируются девять бит,содержащих информацию о правах пользователей трех категорий: собственника файла, определенной им группе пользователей и всех остальных пользователей (по три бита на каждую категорию). Первый битсвязан с возможностью чтения из файла, второй – записи в файл и третий – исполнения файла.

Поэтому права доступа perms удобно специфицировать с помощью трех восьмеричных цифр. Например, 0755 разрешает чтение, запись и право исполнения собственнику файла и чтение и право исполнения группе и всем остальным.Функция creat .возвращает дескриптор файла либо –1, если покаким-то причинам файл создать не удалось.int open (char ∗name, int mode)функция open открывает файл name на чтение (если режим mode равен0 либо O_RDONLY), на запись (если режим mode равен 1 либоO_WRONLY) или на чтение и запись одновременно (если mode равен 2либо O_RDWR).

В системах System V UNIX эти константы определеныв <fcntl.h>, в версиях Bercley (BCD) – в <sys/file.h>. Указатель текущейпозиции устанавливается на начало файла. В некоторых системахфункция open имеет третий параметр – int perms.Функция open возвращает дескриптор файла либо –1, если файлне удалось открыть. Это может произойти по одной из следующих причин: файл не существует, слишком много открытых файлов, попыткаоткрыть на чтение (запись) файл, который нельзя читать (в которыйнельзя писать).int close (int fd)обращение к функции close приводит к разрыву связи между дескриптором fd и связанным с ним открытым файлом (или транспортером) иосвобождает дескриптор для его дальнейшего использования.

Обычновсе файлы закрываются автоматически – при завершении процесса, скоторым они связаны; но так как число одновременно открытых файловдля одного процесса ограничено ( около 20 ), иногда необходимо выполнять эту операцию и в самой программе.72Функция close возвращает 0 в случае успешного закрытия файла и –1, если задан неверный дескриптор файла.int read (int fd, char ∗buf, int n)при обращении к функции read n байтов из файла с дескриптором fd будут помещены в область памяти, на которую ссылается указатель buf.Функция read возвращает число прочитанных байтов.

Эта величина может оказаться меньше n. Нуль означает конец файла; -1 сигнализирует о какой-то ошибке. За один вызов можно прочитать любоечисло байтов, но обычно это число равно 1, что означает «политерную»передачу без буферизации, либо 1024 или 4096, что соответствует физическому блоку внешнего устройства. Эффективнее обмениватьсябольшим числом байтов, так как при этом требуется меньшее числосистемных вызовов.int write (int fd, char ∗buf, int n)функция write записывает n байтов из буфера buf в файл, заданный дескриптором fd.Функция write возвращает число переданных байтов. Если эточисло не совпадает с требуемым ( n ), то следует считать, что запись непрошла; если результат равен –1, то, скорее всего, указан неверный дескриптор файла.10.3.2Дополнительные средства ввода-выводаint link ( char ∗name1, char ∗name2)с физическим файлом может быть связано несколько имен. Первое имяфайл получает при создании.

Последующие имена ( ссылки ) образуются при помощи системной функции link. Параметр name2 – это альтернативное имя для файла с именем name1.Функция link возвращает 0 либо –1, если создать ссылку неудалось (например, файл name2 уже существует).int unlink ( char ∗name)функция unlink удаляет элемент оглавления, соответствующий файлу,имя которого задано параметром name. Если это была последняя ссылкана файл, то файл уничтожается.Функция unlink возвращает 0 либо –1, если файла не существует или он не может быть уничтожен.long lseek ( int fd, long offset, int origin)ввод-вывод обычно бывает последовательным, т.е.

каждая очереднаяоперация чтения-записи начинается с позиции, следующей за обработанной в предыдущей операции. Однако , при желании, можно читатьфайл в произвольном порядке. Системная функция lseek предоставляетспособ передвигаться по файлу, не читая и не записывая данные.Функция lseek в файле с дескриптором fd устанавливает текущую позицию, смещая ее на величину offset относительно места, зада73ваемого значением origin. Если origin равно 0, то смещение происходитот начала файла; если 1 – относительно текущей позиции; если 2 – отконца файла.

Например, если требуется добавить данные в конец файла,то прежде чем что-либо записывать в файл, нужно при помощи lseek(fd,0L, 2) найти конец файла. Чтобы вернуться в начало файла, надо выполнить lseek(fd, 0L, 0).Возвращаемое функцией lseek значение имеет тип long и равноустановленной текущей позиции файла (последующие чтение или запись будут производиться с этой позиции). В случае ошибки lseek выдает -1.

Благодаря lseek с файлами можно работать как с большимимассивами с замедленным доступом.int stat ( char ∗name, struct stat ∗buf)с помощью функции stat можно получить информацию о состояниифайла name. Структура stat описана в <sys/stat.h>. В этом файле такжеопределены константы, которые можно использовать при работе с полями структуры stat.struct stat{ dev_t st_dev;/∗ устройство ∗/ino_t st_ino;/∗номер inode ∗/unsigned short st_mode; /∗ это поле определяет, является ли данный файлобычным файлом, оглавлением, специальнымблочным или специальным литерным; кроме того, st_mode содержит биты, определяющие полномочия ∗/short st_nlink;/∗ число связей ∗/short st_uid;/∗ идентификатор владельца ∗/short st_gid;/∗ идентификатор группы владельца ∗/dev_t st_rdev;/∗ для специальных файлов ∗/off_t st_size;/∗ размер файла в литерах ∗/time_t st_atime;/∗ время последнего чтения из файла ∗/time_t st_mtime;/∗ время последней записи в файл (или время егосоздания).

На это поле не влияют изменения владельца, группы или полномочий∗/time_ st_ctime;/∗ это время устанавливается при записи в файл илипри изменении владельца, группы или полномочий∗/}#define S_IFMT0170000/∗ маска для выделения типа файла ∗/#define S_IFDIR0040000/∗ оглавление-каталог ∗/#define S_IFCHR 0020000/∗ символьно-ориентированный ∗/#define S_IFBLK 0060000/∗ блочно-ориентированный ∗/#define S_IFREG 0100000/∗ обычный файл ∗/#define S_IREAD 0000400/∗ право на чтение для владельца ∗/#define S_IWRITE 0000200/∗ право на запись для владельца ∗/#define S_IEXEC 0000100/∗ право на выполнение для владельца ∗/74Более подробную информацию о структуре stat и связанных с ней константах см.

в файле <sys/stat.h>. Типы, подобные dev_t и ino_t, определены в<sys/types.h>.Системный вызов stat по имени файла name возвращает полную информацию о нем, содержащуюся в inode, или –1 в случае ошибки.Итак,#include <sys/types.h>#include <sys/stat.h>…struct stat stbuf;char ∗name = “my_file”;…stat( name, &stbuf);заполняет структуру stbuf информацией о файле my_file.10.3.3 Процессы, транспортеры, сигналыint fork ( void)системная функция fork – средство для создания копии процесса, обратившегося этой функции.

Единственное различие заключается в том,что значение, возвращаемое в старый ( родительский ) процесс, - этономер порожденного процесса, а значение, возвращаемое в новый процесс-потомок, равно нулю. Если функции не удалось создать новыйпроцесс, то возвращается значение -1. Единственными совместно используемыми родителем и потомком ресурсами являются файлы, которые были открыты в момент распараллеливания родительского процесса. Они имеют общий указатель чтения-записи.switch ( fork() ){ case 0: { /∗ процесс-потомок ∗/ }case –1: { /∗ неудача в создании нового процесса ∗/ }default: { /∗ процесс-родитель ∗/ }}int execl ( char ∗name, char ∗arg0, char ∗arg1,…, char ∗argn, 0)int execlp ( char ∗file, char ∗arg0, char ∗arg1,…, char ∗argn, 0)int execv ( char ∗name, char ∗argv[ ])int execvp ( char ∗file, char ∗argv[ ])системная функция exec ( ее любой вариант) замещает выполняемую вданный момент программу новой программой и начинает выполнять ее,передавая управление на ее точку входа.

В случае успешной заменывозврата из функции exec не происходит. Если функция exec передаетуправление в вызвавшую ее программу, то это свидетельствует обошибке; возвращаемое значение в этом случае равно -1. Наиболее вероятная ошибка – файла не существует либо он не является исполняемым.Номер процесса функцией exec не меняется, неизменными остаются и состояния сигналов, кроме перехватываемых: они сбрасываются в нуль.

После выполнения exec все открытые файлы остаются от75крытыми, их указатели чтения-записи не меняются: это позволяет родителю открывать файлы для потомка.Параметры name и file задают имя файла, содержащего программу, которую требуется выполнить ( файл типа a.out ); они различаются тем, что name - это полное имя файла ( с указанием пути), file имя файла в текущей директории. Параметр argv – массив указателей напараметры – строки литер, заканчивающиеся признаком конца строки;по соглашению argv[0] – имя исполняемого файла, последним элементом массива argv должен быть нулевой указатель.

Вариант функцииexec с параметром argv удобен в том случае, если количество аргументов вызова заранее не известно. Если аргументы известны заранее, то ихможно задавать явно - arg0, arg1,…, argn, в этом случае arg0 должен бытьименем исполняемого файла.int wait ( int ∗status )обращение к системной функции wait вызывает задержку выполнениявызвавшего ее процесса до тех пор, пока не будет получен какой-либосигнал или не завершится один из процессов-потомков.

Если в моментвызова wait нет ни одного порожденного данным процессом процессапотомка, то возврат из wait происходит немедленно с кодом ошибки -1 .При нормальном возврате передается номер завершившегося процесса.Если процессов-потомков несколько, то порядок их завершения не определен, чтобы узнать об их завершении, требуется обратиться к функции wait несколько раз.

Ожидать завершения работы порожденныхпроцессов может только их родительский процесс; если родитель завершается раньше процессов-потомков, то они наследуются процессомс номером 1. Если выполнение функции wait завершается из-за получения сигнала, то возвращается –1.Если указатель status отличен от нуля, то обычно в младшийбайт слова, на которое он указывает, помещается системное представление кода завершения процесса-потомка: оно равно нулю при нормальном завершении и не равно нулю при разного рода затруднениях.Следующий байт берется из аргумента вызова системной функции exitили возвращается из main, которой заканчивается выполнение процесса-потомка.int exit ( int status)системная функция exit представляет собой обычное средство завершения процесса.

Характеристики

Тип файла
PDF-файл
Размер
942,54 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

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