Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 16
Текст из файла (страница 16)
Функция exit закрывает все файлы данного процесса иуведомляет родительский процесс о завершении процесса-потомка, если он находится в состоянии ожидания. Родительскому процессу передаются младшие 8 бит статуса завершения status. По соглашению нульозначает успешное завершение процесса, а отличное от нуля значение –аварийное.int getpid ( )int getppid ( )функция getpid возвращает номер обратившегося к ней процесса; чащевсего используется для формирования уникальных имен временных76файлов.
Функция getppid возвращает номер процесса-родителя обратившегося к ней процесса.int pipe ( int fd[2])системная функция pipe создает механизм ввода-вывода для процессовродственников, называемый транспортером (каналом). Через дескриптор fd[0] осуществляется чтение из канала, через fd[1] – запись в канал.Если канал пуст, то процесс, читающий из него, приостанавливается и будет ждать, пока в канал не будет записано какое-то количество литер.Если канал заполнен, а процесс пытается писать в него, то этотпроцесс будет приостановлен до тех пор, пока читающий процесс непрочитает некоторое количество литер из канала.
Передача данных через канал обеспечивается по методу FIFO – «первым пришел – первымушел».Предполагается, что взаимодействующие процессы передаютданные через канал с помощью функций read и write. Функция чтенияread возвращает признак конца файла, если канал пуст и в него некомуписать (все дескрипторы для записи в этот канал закрыты ).int dup ( int fd)int dup2 ( int fd1, int fd2)по заданному дескриптору файла fd системная функция dup возвращаетдругой дескриптор файла с наименьшим свободным номером, эквивалентный исходному. Если fd не является дескриптором открытого файла или превышено число открытых файлов (обычно 20), функция dupвозвращает –1.В результате выполнения системной функции dup2 дескрипторfd2 будет указывать на тот же файл, что и дескриптор fd1.
Если с дескриптором fd2 уже был связан открытый файл, то он предварительно закроется. Если значение fd2 больше 20 либо fd1 не является дескриптором открытого файла, то dup2 возвращает –1.Например, с помощью этих функций, стандартный ввод можетбыть перенаправлен в канал следующим образом:int p[2];pipe(p);…close(0);dup(p[0]);close(p[0]);либоint p[2];pipe(p);…dup2(p[0], 0);close(p[0]);void (*signal (int sig, void (*handler)(int)))(int)системная функция signal устанавливает, как будет обрабатываться последующий сигнал sig. Если параметр handler равен SIG_DFL, то используется «обработка по умолчанию», зависящая от реализации; еслизначение handler равно SIG_IGN, то сигнал игнорируется; в остальныхслучаях будет выполнено обращение к функции, на которую указывает77handler.
Функция signal возвращает предыдущее значение обработчикаэтого сигнала.Если после выполнения функции signal придет сигнал sig, тосначала восстанавливается способность к его обработке «по умолчанию», а затем вызывается функция, заданная в handler, т.е. выполняетсявызов (*handler)(sig). Если функция-обработчик вернет управление, товыполнение программы возобновится с того места, на котором программа была прервана пришедшим сигналом.Если требуется перехватывать сигнал при каждом его получении, то функция-обработчик должна обратиться к функции signal, определив способ обработки сигнала, иначе он будет обрабатываться «поумолчанию».Начальные значения обработчиков сигналов зависят от реализации.Некоторые системные функции могут завершиться преждевременно, не выполнив требуемых действий, если во время их работы былполучен перехватываемый сигнал (например, при выполнении функцийread или write для медленных устройств; при выполнении wait).
В такихслучаях при получении сигнала область состояния процесса модифицируется таким образом, что после выполнения функции-обработчика ивозврата из него в точку прерывания, будет имитироваться возврат изпрерванной системной функции с кодом ошибки. Программа пользователя, при желании, может повторить вызов этой системной функции.Имена некоторых сигналов, определенных в <signal.h>:SIGPIPESIGALRMSIGKILLSIGFPESIGINTSIGSEGVSIGBUSSIGTERMется поSIGTRAPSIGILLSIGABRTзапись в транспортер, из которого некому читать. Это происходит, если получатель завершает работу, оставляя пишущуюсторону с разорванным транспортером;сигнал от таймера;уничтожение процесса.
Этот сигнал не может быть ни перехвачен, ни проигнорирован;арифметическая ошибка: деление на 0 или переполнение привыполнении операций с плавающей точкой;прерывание от терминала; происходит при нажатии клавишdel или break;обращение за пределы сегмента;ошибка шины; этот сигнал обычно возбуждается из-за ошибкив косвенной адресации с использованием указателей в программе на С;сигнал программного прерывания; этот сигнал посылаумолчанию командой kill;трассировочное прерывание (используется отладчиком);попытка выполнить нелегальную машинную команду;аварийное завершение;int kill ( int pid, int sig)78системная функция kill посылает сигнал sig процессу, заданному номером процесса pid.
Если sig не является номером сигнала из <signal.h>или указанного процесса не существует, то функция kill возвращает -1.int alarm ( unsigned seconds)системная функция alarm вызывает возбуждение сигнала SIGALRM ввызвавшем ее процессе через seconds секунд реального времени. Запросы на возбуждение сигнала не накапливаются. Последующие запросына возбуждение сигнала (если они требуются) должны переустанавливаться в обработчике сигнала. Если значение параметра seconds равно 0,то ранее сделанный запрос на возбуждение сигнала игнорируется.Функция alarm возвращает интервал времени, оставшийся до возбуждения сигнала от предыдущей установки.11.
ЛИТЕРАТУРА1. Б. Керниган, Д. Ритчи. Язык программирования Си. М., «Финансы истатистика», 19922. American National Standard for Information Systems - ProgrammingLanguage C, X3.159-19893. Б. Керниган, Д. Ритчи, А. Фьюэр Язык программирования Си. Задачипо языку Си. М., «Финансы и статистика», 19854. Н. Джехани. Программирование на языке Си. М., «Радио и связь»,19885.
Б. Керниган, Р. Пайк. Универсальная среда программирования UNIX.М., «Финансы и статистика», 19926. С. Баурн. Операционная система UNIX.М., «Мир», 19867. С.А. Абрамов, Г.Г. Гнездилова и др. Задачи по программированию.М., «Наука», 19888. В.Н. Пильщиков. Сборник упражнений по языку Паскаль. М., «Наука», 19897912. СОДЕРЖАНИЕ1.2.3.ПРЕДИСЛОВИЕ............................................................................................................................. 3ТИПЫ, ОПЕРАЦИИ, ВЫРАЖЕНИЯ........................................................................................... 3УПРАВЛЕНИЕ ...............................................................................................................................
83.1Синтаксис и семантика операторов языка Си...................................................................... 83.2Обработка числовых данных............................................................................................... 113.3Обработка символьных данных .......................................................................................... 144. ФУНКЦИИ И СТРУКТУРА ПРОГРАММЫ ............................................................................. 165. УКАЗАТЕЛИ И МАССИВЫ....................................................................................................... 206.
СТРУКТУРЫ, ОБЪЕДИНЕНИЯ................................................................................................. 286.1Основные сведения............................................................................................................... 286.2Структуры и функции. Указатели на структуры. .............................................................. 306.3Структуры со сылками на себя............................................................................................ 347. ВВОД-ВЫВОД .............................................................................................................................
387.1Стандартный ввод-вывод..................................................................................................... 387.2Работа с файлами.................................................................................................................. 408. ИНТЕРФЕЙС С СИСТЕМОЙ UNIX .......................................................................................... 428.1Низкоуровневый ввод-вывод .............................................................................................. 428.2Процессы, сигналы ............................................................................................................... 448.2.1Конвейер, перенаправление ввода-вывода.................................................................