ПРИЛОЖЕНИЕ. СИСТЕМНЫЕ ОПЕРАЦИИ 
 
В приложении дается краткий обзор
функций системы UNIX. Полное описание
этих функций содержится в
руководстве
программиста-пользователя версии V
системы UNIX. Сведений, приведенных
здесь, вполне достаточно для того,
чтобы разобраться в примерах
программ, представленных в книге.  
Имена файлов, упоминаемые в
тексте, представляют собой
последовательности символов,
завершающиеся пустым символом и
состоящие из компонент,
разделенных наклонной чертой. В
случае ошибки все функции
возвращают код завершения, равный
-1, а код самой ошибки засылается в
переменную errno, имеющую тип external. В
случае успешного завершения код
возврата имеет значение, равное 0.
Некоторые из обращений к
операционной системе являются
точкой входа сразу для нескольких
функций: это означает, что данные
функции используют один и тот же
ассемблерный интерфейс. Приводимый
список функций удовлетворяет
стандартным условиям, принятым в
справочных руководствах по системе
UNIX, при этом вопросы, связанные с
тем, является ли одно обращение к
операционной системе точкой входа
для одной или нескольких функций,
рассматриваются отдельно.  
access  
     access(filename,mode)
      char *filename;
      int mode;
Функция access проверяет, имеет ли
процесс разрешение на чтение,
запись или исполнение файла
(проверяемый тип доступа зависит от
значения параметра mode). Значение mode
является комбинацией двоичных
масок 4 (для чтения), 2 (для записи) и 1
(для исполнения). Вместо
исполнительного кода
идентификации пользователя в
проверке участвует фактический
код.  
acct  
     acct(filename)
      char *filename;
Функция acct включает учет
системных ресурсов, если параметр
filename непустой, и выключает - в
противном случае.  
аlarm  
     unsigned alarm(seconds)
      unsigned seconds;
Функция alarm планирует посылку
вызывающему ее процессу сигнала
тревоги через указанное количество
секунд (seconds). Она возвращает число
секунд, оставшееся до посылки
сигнала от момента вызова функции.  
brk  
     int brk(end_data_seg)
      char *end_data_seg;
Функция brk устанавливает верхнюю
границу (старший адрес) области
данных процесса в соответствии со
значением параметра end_data_seg. Еще
одна функция, sbrk, использует ту же
точку входа и увеличивает адрес
верхней границы области на
указанную величину.  
сhdir  
     chdir(filename)
      char *filename;
Функция chdir делает текущим
каталогом вызывающего процесса
каталог, указанный в параметре
filename.  
сhmod  
     chmod(filename,mode)
      char *filename;
Функция chmod изменяет права
доступа к указанному файлу в
соответствии со значением
параметра mode, являющимся
комбинацией из следующих кодов (в
восьмеричной системе):  
04000 бит установки кода
идентификации пользователя  
02000 бит установки группового
кода идентификации  
01000 признак sticky bit  
00400 чтение владельцем  
00200 запись владельцем  
00100 исполнение владельцем  
00040 чтение групповым
пользователем  
00020 запись групповым
пользователем  
00010 исполнение групповым
пользователем  
00004 чтение прочим
пользователем  
00002 апись прочим
пользователем  
00001 исполнение прочим
пользователем  
сhown  
     chown(filename,owner,group)
      char *filename;
      int owner,group;
Функция chown меняет коды
идентификации владельца и группы
для указанного файла на коды,
указанные в параметрах owner и group.  
сhroot  
     chroot(filename)
      char *filename;
Функция chroot изменяет частный
корень вызывающего процесса в
соответствии со значением
параметра filename.  
сlosе  
     close(fildes)
      int fildes;
Функция close закрывает дескриптор
файла, полученный в результате
выполнения функций open, creat, dup, pipe или
fcntl, или унаследованный от функции
fork.  
сreat  
     creat(filename,mode)
      char *filename;
      int mode;
Функция creat создает новый файл с
указанными именем и правами
доступа. Параметр mode имеет тот же
смысл, что и в функции access, при этом
признак sticky-bit очищен, а разряды,
установленные функцией umask,
сброшены. Функция возвращает
дескриптор файла для последующего
использования в других функциях.  
duр  
     dup(fildes)
      int fildes;
Функция dup создает копию
указанного дескриптора файла,
возвращая дескриптор с наименьшим
номером из имеющихся в системе.
Старый и новый дескрипторы
используют один и тот же указатель
на файл, а также и другие
совпадающие атрибуты.  
ехес  
     execve(filename,argv,envp)
      char *filename;
      char *argv[];
      char *envp[];
Функция execve исполняет файл с
именем filename, загружая его в
адресное пространство текущего
процесса. Параметр argv
соответствует списку аргументов
символьного типа, передаваемых
запускаемой программе, параметр envp
соответствует массиву,
описывающему среду выполнения
нового процесса.  
ехit  
     exit(status)
      int status;
Функция exit завершает вызывающий
процесс, возвращая его родителю 8
младших разрядов из слова
состояния процесса. Ядро само может
вызывать эту функцию в ответ на
поступление определенных сигналов.
 
fcntl  
     fcntl(fildes,cmd,arg)
      int fildes,cmd,arg;
Функция fcntl обеспечивает
выполнение набора разнообразных
операций по отношению к открытым
файлам, идентифицируемым с помощью
дескриптора fildes. Параметры cmd и arg
интерпретируются следующим
образом (определение буквенных
констант хранится в файле
"/usr/include/fcntl.h"):  
F_DUPFD вернуть наименьшее
значение дескриптора, большее или
равное значению arg  
F_SETFD установить флаг
"close-on-exec" в младшем разряде arg
(файл будет закрыт функцией exec)  
F_GETFD вернуть состояние флага
"close-on-exec"  
F_SETFL установить флаги,
управляющие состоянием файла (O_NDELAY
- не приостанавливаться в ожидании
завершения ввода-вывода, O_APPEND -
записываемые данные добавлять в
конец файла)  
F_GETFL получить значения флагов,
управляющих состоянием файла  
     struct flock
              short l_type;   /* F_RDLCK - блокировка     чтения,
                                 F_WRLCK - блокировка     записи,
                                 F_UNLCK - снятие блокировки */
              short l_whence; /* адрес начала блокируемого участка
                                 дается в виде смещения  относительно
                                 начала файла (0), относительно
                                 текущей позиции  указателя (1),
                                относительно  конца файла (2) */
              long l_start;   /* смещение в байтах, интерпретируемое
                                 в соответствии со значением
                                 l_whence */
              long l_len;     /* длина  блокируемого  участка   в
                                 байтах. Если указан 0,  блокируется
                                 участок от l_start до конца
                                 файла */
              long l_pid;     /* идентификатор процесса, блокирующего
                                 файл */
              long l_sysid;   /* системный идентификатор  процесса,
                                 блокирующего файл */
F_GETLK прочитать первый код
блокировки, мешающей использовать
значение arg и затирать его. Если
блокировка отсутствует, поменять
значение l_type в arg на F_UNLCK  
F_SETLK установить или снять
блокировку файла в зависимости от
значения arg. В случае невозможности
установить блокировку вернуть -1  
F_SETLKW установить или снять
блокировку содержащихся в файле
данных в зависимости от значения arg.
В случае невозможности установить
блокировку приостановить
выполнение  
Блокировки, связанные с чтением
из файла, могут перекрывать друг
друга. Блокировки, связанные с
записью, перекрываться не могут.  
fork  
     fork() 
Функция fork создает новый процесс.
Порождаемый процесс представляет
собой логическую копию
процесса-родителя. На выходе из
функции процессу-родителю
возвращается код идентификации
потомка, потомку - нулевое значение.
 
getpid  
     getpid() 
Функция getpid возвращает
идентификатор вызывающего
процесса. Эту же точку входа
используют функции: getpgrp,
возвращающая идентификатор группы,
в которую входит вызывающий
процесс, и getppid, возвращающая
идентификатор процесса, который
является родителем текущего
процесса.  
getuid  
     getuid() 
Функция getuid возвращает
фактический код идентификации
пользователя вызывающего процесса.
Эту же точку входа используют
функции: geteuid, возвращающая
исполнительный код идентификации
пользователя, getgid, возвращающая
групповой код, и getegid, возвращающая
исполнительный групповой код
идентификации вызывающего
процесса.  
ioctl  
     ioctl(fildes,cmd,arg)
      int fildes,cmd;
Функция ioctl выполняет набор
специальных операций по отношению
к открытому устройству, дескриптор
которого указан в параметре fildes.
Тип команды, выполняемой по
отношению к устройству,
описывается параметром cmd, а
параметр arg является аргументом
команды.  
kill  
     kill(pid,sig)
      int pid,sig;
Функция kill посылает процессам,
идентификаторы которых указаны в
параметре pid, сигнал, описываемый
параметром sig.  
pid имеет положительное значение
сигнал посылается процессу с
идентификатором pid  
pid = 0 сигнал посылается
процессам, групповой идентификатор
которых совпадает с
идентификатором отправителя  
pid = -1 если процесс-отправитель
исполняется под идентификатором
суперпользователя, сигнал
посылается всем процессам, в
противном случае, сигнал
посылается процессам, фактический
код идентификации пользователя у
которых совпадает с
идентификатором суперпользователя
 
pid < -1 сигнал посылается
процессам, групповой идентификатор
которых совпадает с pid  
Исполнительный код идентификации
пользователя процесса-отправителя
должен указывать на
суперпользователя, в противном
случае, фактический или
исполнительный коды идентификации
отправителя должны совпадать с
соответствующими кодами
процессов-получателей.  
link  
     link(filename1,filename2)
      char *filename1,*filename2;
Функция link присваивает файлу
filename1 новое имя filename2. Файл
становится доступным под любым из
этих имен.  
lseek  
     lseek(fildes,offset,origin)
      int fildes,origin;
      long offset;
Функция lseek изменяет положение
указателя чтения-записи для файла с
дескриптором fildes и возвращает
новое значение. Положение
указателя зависит от значения
параметра origin:  
0 установить указатель на
позицию, соответствующую
указанному смещению в байтах от
начала файла  
1 сдвинуть указатель с его
текущей позиции на указанное
смещение  
2 установить указатель на
позицию, соответствующую
указанному смещению в байтах от
конца файла  
мknod  
     mknod(filename,modes,dev)
      char *filename;
      int mode,dev;
Функция mknod создает специальный
файл, каталог или поименованный
канал (очередь по принципу
"первым пришел - первым вышел")
в зависимости от значения
параметра modes:  
010000 поименованный канал  
020000 специальный файл
устройства ввода-вывода символами  
040000 каталог  
060000 специальный файл
устройства ввода-вывода блоками  
12 младших разрядов параметра modes
имеют тот же самый смысл, что и в
функции chmod. Если файл имеет
специальный тип, параметр dev
содержит старший и младший номера
устройства.  
мount  
     mount(specialfile,dir,rwflag)
      char *specialfile,*dir;
      int rwflag;
Функция mount выполняет
монтирование файловой системы, на
которую указывает параметр specialfile,
в каталоге dir. Если младший бит
параметра rwflag установлен, файловая
система монтируется только для
чтения.  
мsgctl  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/msg.h>
      msgctl(id,cmd,buf)
      int id,cmd;
      struct msgid_ds *buf;
В зависимости от операции,
указанной в параметре cmd, функция
msgctl дает процессам возможность
устанавливать или запрашивать
информацию о статусе очереди
сообщений с идентификатором id, а
также удалять очередь из системы.
Структура msquid_ds определена
следующим образом:  
   struct ipc_perm {
         ushort  uid;  /* идентификатор текущего пользователя */
         ushort  gid;  /* идентификатор текущей группы */
         ushort cuid;  /* идентификатор пользователя-создателя */
         ushort cgid;  /* идентификатор группы создателя */
         ushort mode;  /* права доступа */
         short  pad1;  /* используется системой */
         long   pad2;  /* используется системой */
    };
    struct msquid_ds {
          struct ipc_perm   msg_perm; /* структура,   описывающая
                                         права доступа */
          short             pad1[7];  /* используется системой */
          ushort            msg_qnum; /* количество  сообщений  в
                                         очереди */
          ushort            msg_qbytes; /* максимальный    размер
                                           очереди в байтах */
          ushort            msg_lspid; /* идентификатор процесса,
                                          связанного  с последней
                                          посылкой сообщения */
          ushort            msg_lrpid; /* идентификатор процесса,
                                          связанного  с последним
                                          получением сообщения */
          time_t            msg_stime; /* время последней посылки
                                          сообщения */
          time_t            msg_rtime; /* время последнего  полу-
                                          чения сообщения */
          time_t            msg_ctime; /* время последнего  изме-
                                          нения */
    };
Типы операций:  
IPC_STAT Прочитать в буфер
заголовок очереди сообщений,
ассоциированный с идентификатором
id  
IPC_SET Установить значения
переменных msg_perm.uid, msg_perm.gid, msg_perm.mode (9
младших разрядов структуры msg_perm) и
mgr_qbytes в соответствии со значениями,
содержащимися в буфере  
IPC_RMID Удалить из системы
очередь сообщений с
идентификатором id  
мsgget  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/msg.h>
      msgget(key,flag)
      key_t key;
      int flag;
Функция msgget возвращает
идентификатор очереди сообщений,
имя которой указано в key. Параметр key
может указывать на то, что
возвращаемый идентификатор
относится к частной очереди
(IPC_PRIVATE), в этом случае создается
новая очередь сообщений. С помощью
параметра flag можно сделать
указание о необходимости создания
очереди (IPC_CREAT), а также о том, что
создание очереди должно
выполняться монопольно (IPC_EXCL). В
последнем случае, если очередь уже
существует, функция msgget дает отказ.  
мsgsnd и msgrcv  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/msg.h>
      msgsnd(id,msgp,size,flag)
      int id,size,flag;
      struct msgbuf *msgp;
      msgrcv(id,msgp,size,type,flag)
      int id,size,type,flag;
      struct msgbuf *msgmp;
Функция msgsnd посылает сообщение
указанного размера в байтах (size) из
буфера msgp в очередь сообщений с
идентификатором id. Структура msgbuf
определена следующим образом:  
     struct msgbuf {
              long mtype;
              char mtext[];
      };
Если в параметре flag бит IPC_NOWAIT
сброшен, функция msgsnd будет
приостанавливаться в тех случаях,
когда размер отдельного сообщения
или число сообщений в системе
превышают допустимый максимум.
Если бит IPC_NOWAIT установлен, функция
msgsnd в этих случаях прерывает свое
выполнение.Функция msgrcv принимает
сообщение из очереди с
идентификатором id. Если параметр type
имеет нулевое значение, из очереди
будет выбрано сообщение, первое по
счету; если положительное значение,
из очереди выбирается первое
сообщение данного типа; если
отрицательное значение, из очереди
выбирается сообщение, имеющее
самый младший тип среди тех типов,
значение которых не превышает
абсолютное значение параметра type. В
параметре size указывается
максимальный размер сообщения,
ожидаемого пользователем. Если в
параметре flag установлен бит MSG_NOERROR,
в том случае, когда размер
получаемого сообщения превысит
предел, установленный параметром
size, ядро обрежет это сообщение. Если
же соответствующий бит сброшен, в
подобных случаях функция будет
возвращать ошибку. Если в параметре
flag бит IPC_NOWAIT сброшен, функция msgrcv
приостановит свое выполнение до
тех пор, пока сообщение,
удовлетворяющее указанному в
параметре type условию, не будет
получено. Если соответствующий бит
сброшен, функция завершит свою
работу немедленно. Функция msgrcv
возвращает размер полученного
сообщения (в байтах).  
niсе  
     nice(increment)
      int increment;
Функция nice увеличивает значение
соответствующей компоненты,
участвующей в вычислении
приоритета планирования текущего
процесса, на величину increment.
Увеличение значения nice ведет к
снижению приоритета планирования.  
оpen  
     #include <fcntl.h>
      open(filename,flag,mode)
      char *filename;
      int flag,mode;
Функция open выполняет открытие
указанного файла в соответствии со
значением параметра flag. Значение
параметра flag представляет собой
комбинацию из следующих разрядов
(причем из первых трех разрядов
может быть использован только
один):  
O_RDONLY открыть только для
чтения  
O_WRONLY открыть только для
записи  
O_RDWR открыть для чтения и
записи  
O_NDELAY если файл является
специальным файлом устройства,
функция возвращает управление, не
дожидаясь ответного сигнала; если
файл является поименованным
каналом, функция в случае неудачи
возвращает управление немедленно
(с индикацией ошибки, когда бит O_WRONLY
установлен), не дожидаясь открытия
файла другим процессом  
O_APPEND добавляемые данные
записывать в конец файла  
O_CREAT если файл не существует,
создать его; режим создания (mode)
имеет тот же смысл, что и в функции
creat; если файл уже существует,
данный флаг игнорируется  
O_TRUNC укоротить длину файла до 0
 
O_EXCL если этот бит и бит O_CREAT
установлены и файл существует,
функция не будет выполняться; это
так называемое "монопольное
открытие"  
Функция open возвращает дескриптор
файла для последующего
использования в других системных
функциях.  
рausе  
     pause() 
Функция pause приостанавливает
выполнение текущего процесса до
получения сигнала.  
рipе  
     pipe(fildes)
      int fildes[2];
Функция pipe возвращает
дескрипторы чтения и записи
(соответственно, в fildes[0] и fildes[1]) для
данного канала. Данные передаются
через канал в порядке поступления;
одни и те же данные не могут быть
прочитаны дважды.  
рlock  
     #include <sys/lock.h>
      plock(op)
      int op;
Функция plock устанавливает и
снимает блокировку областей
процесса в памяти в зависимости от
значения параметра op:  
PROCLOCK заблокировать в памяти
области команд и данных  
TXTLOCK заблокировать в памяти
область команд  
DATLOCK заблокировать в памяти
область данных  
UNLOCK снять блокировку всех
областей  
рrofil  
     profil(buf,size,offset,scale)
      char *buf;
      int size,offset,scale;
Функция profil запрашивает у ядра
профиль выполнения процесса.
Параметр buf определяет массив,
накапливающий число копий
процесса, выполняющихся в разных
адресах. Параметр size определяет
размер массива buf, offset - начальный
адрес участка профилирования, scale -
коэффициент масштабирования.  
рtraсе  
     ptrace(cmd,pid,addr,data)
      int cmd,pid,addr,data;
Функция ptrace дает текущему
процессу возможность выполнять
трассировку другого процесса,
имеющего идентификатор pid, в
соответствии со значением
параметра cmd:  
0 разрешить трассировку
потомку (по его указанию)  
1,2 вернуть слово,
расположенное по адресу addr в
пространстве трассируемого
процесса с идентификатором pid  
3 вернуть слово, расположенное
в пространстве трассируемого
процесса по адресу со смещением addr  
4,5 записать значение по адресу
addr в пространстве трассируемого
процесса  
6 записать значение по адресу
со смещением addr  
7 заставить трассируемый
процесс возобновить свое
выполнение  
8 заставить трассируемый
процесс завершить свое выполнение  
9 машинно-зависимая команда -
установить в слове состояния
программы бит для отладки в режиме
пошагового выполнения  
read  
     read(fildes,buf,size)
      int fildes;
      char *buf;
      int size;
Функция read выполняет чтение из
файла с дескриптором fildes в
пользовательский буфер buf
указанного в параметре size
количества байт. Функция
возвращает число фактически
прочитанных байт. Если файл
является специальным файлом
устройства или каналом и если в
вызове функции open был установлен
бит O_NDELAY, функция read в случае
отсутствия доступных для чтения
данных возвратит управление
немедленно.  
semctl  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/sem.h>
      semctl(id,num,cmd,arg)
      int id,num,cmd;
      union semun {
              int val;
              struct semid_ds *buf;
              ushort *array;
      } arg;
Функция semctl выполняет указанную в
параметре cmd операцию над очередью
семафоров с идентификатором id.  
GETVAL вернуть значение того
семафора, на который указывает
параметр num  
SETVAL установить значение
семафора, на который указывает
параметр num, равным значению arg.val  
GETPID вернуть идентификатор
процесса, выполнявшего последним
функцию semop по отношению к тому
семафору, на который указывает
параметр num  
GETNCNT вернуть число процессов,
ожидающих того момента, когда
значение семафора станет
положительным  
GETZCNT вернуть число процессов,
ожидающих того момента, когда
значение семафора станет нулевым  
GETALL вернуть значения всех
семафоров в массиве arg.array  
SETALL установить значения всех
семафоров в соответствие с
содержимым массива arg.array  
IPC_STAT считать структуру
заголовка семафора с
идентификатором id в буфер arg.buf  
IPC_SET установить значения
переменных sem_perm.uid, sem_perm.gid и sem_perm.mode
(младшие 9 разрядов структуры sem_perm)
в соответствии с содержимым буфера
arg.buf  
IPC_RMID удалить семафоры,
связанные с идентификатором id, из
системы  
Параметр num возвращает на
количество семафоров в
обрабатываемом наборе. Структура
semid_ds определена следующим образом:  
     struct semid_ds {
             struct ipc_perm   sem_perm;   /* структура, описыва-
                                              ющая  права  досту-
                                              па */
             int *             pad;        /* используется систе-
                                              мой */
             ushort            sem_nsems;  /* количество  семафо-
                                              ров в наборе */
             time_t            sem_otime;  /* время    выполнения
                                              последней  операции
                                              над семафором */
             time_t            sem_ctime;  /* время    последнего
                                              изменения */
      };
Структура ipc_perm имеет тот же вид,
что и в функции msgctl.  
semget  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/sem.h>
      semget(key,nsems,flag)
      key_t key;
      int nsems,flag;
Функция semget создает массив
семафоров, корреспондирующий с
параметром key. Параметры key и flag
имеют тот же смысл, что и в функции
msgget.  
semор  
     semop(id,ops,num)
      int id,num;
      struct sembuf **ops;
Функция semop выполняет набор
операций, содержащихся в структуре
ops, над массивом семафоров,
связанных с идентификатором id.
Параметр num содержит количество
записей, составляющих структуру ops.
Структура sembuf определена следующим
образом:  
     struct sembuf {
             short    sem_num;   /* номер семафора */
             short    sem_op;    /* тип операции над семафором */
             short    sem_flg;   /* флаг */
      };
Переменная sem_num содержит
указатель в массиве семафоров,
ассоциированный с данной
операцией, а переменная sem_flg - флаги
для данной операции. Переменная sem_op
может принимать следующие
значения:  
отрицательное если сумма
значения семафора и значения sem_op
>= 0, значение семафора изменяется
на величину sem_op; в противном случае,
функция приостанавливает свое
выполнение, если это разрешено
флагом  
положительное увеличить
значение семафора на величину sem_op  
нулевое если значение
семафора равно 0, продолжить
выполнение; в противном случае,
приостановить выполнение, если это
разрешается флагом  
Если для данной операции в
переменной sem_flg установлен флаг
IPC_NOWAIT, функция semop возвращает
управление немедленно в тех
случаях, когда она должна была бы
приостановиться. Если установлен
флаг SEM_UNDO, восстанавливается
предыдущее значение семафора (sem_op
вычитается из текущей суммы типов
операций). Когда процесс
завершится, значение семафора
будет увеличено на эту сумму.
Функция semop возвращает значение
последней операции над семафором.  
setpgrр  
     setpgrp() 
Функция setpgrp приравнивает
значение идентификатора группы, к
которой принадлежит текущий
процесс, значению идентификатора
самого процесса и возвращает новое
значение идентификатора группы.  
setuid  
     setuid(uid)
      int uid;
      setgid(gid)
      int gid;
Функция setuid устанавливает
значения фактического и
исполнительного кодов
идентификации пользователя
текущего процесса. Если вызывающий
процесс исполняется под
управлением суперпользователя,
функция сбрасывает значения
указанных кодов. В противном
случае, если фактический код
идентификации пользователя имеет
значение, равное значению uid,
функция setuid делает равным этому
значению и исполнительный код
идентификации пользователя. То же
самое происходит, если значению uid
равен код, сохраненный после
выполнения setuid-программы,
запускаемой с помощью функции exec.
Функция setgid имеет тот же смысл по
отношению к аналогичным групповым
кодам.  
shmctl  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/shm.h>
      shmctl(id,cmd,buf)
      int id,cmd;
      struct shmid_ds *buf;
Функция shmctl выполняет различные
операции над областью разделяемой
памяти, ассоциированной с
идентификатором id. Структура shmid_ds
определена следующим образом:  
     struct shmid_ds {
            struct ipc_perm   shm_perm;   /* структура, описываю-
                                             щая права доступа */
            int               shm_segsz;  /* размер сегмента */
            int *             pad1;       /* используется  систе-
                                             мой */
            ushort            shm_lpid;   /* идентификатор   про-
                                             цесса, связанного  с
                                             последней  операцией
                                             над областью */
            ushort            shm_cpid;   /* идентификатор   про-
                                             цесса-создателя */
            ushort            shm_nattch; /* количество присоеди-
                                             нений к процессам */
            short             pad2;       /* используется  систе-
                                             мой */
            time_t            shm_atime;  /* время     последнего
                                             присоединения */
            time_t            shm_dtime;  /* время     последнего
                                             отсоединения */
            time_t            shm_ctime;  /* время     последнего
                                             внесения     измене-
                                             ний */
      };
Операции:  
IPC_STAT прочитать в буфер buf
содержимое заголовка области,
ассоциированной с идентификатором
id  
IPC_SET установить значения
переменных shm_perm.uid, shm_perm.gid и shm_perm.mode
(9 младших разрядов структуры) в
заголовке области в соответствии с
содержимым буфера buf  
IPC_RMID удалить из системы
область разделяемой памяти,
ассоциированной с идентификатором
id  
shmget  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/shm.h>
      shmget(key,size,flag)
      key_t key;
      int size,flag;
Функция shmget обращается к области
разделяемой памяти или создает ее.
Параметр size задает размер области в
байтах. Параметры key и flag имеют тот
же смысл, что и в функции msgget.  
shmор  
     #include <sys/types.h>
      #include <sys/ipc.h>
      #include <sys/shm.h>
      shmat(id,addr,flag)
      int id,flag;
      char *addr;
      shmdt(addr)
      char *addr;
Функция shmat присоединяет область
разделяемой памяти,
ассоциированную с идентификатором
id, к адресному пространству
процесса. Если параметр addr имеет
нулевое значение, ядро само
выбирает для присоединения области
подходящий адрес. В противном
случае оно пытается присоединить
область, используя в качестве
значение параметра addr в качестве
адреса. Если в параметре flag
установлен бит SHM_RND, ядро в случае
необходимости округляет адрес.
Функция shmat возвращает адрес, по
которому область присоединяется
фактически.Функция shmdt отсоединяет
область разделяемой памяти,
присоединенную ранее по адресу addr.  
signal  
     #include <signal.h>
      signal(sig,function)
      int sig;
      void (*func)();
Функция signal дает текущему
процессу возможность управлять
обработкой сигналов. Параметр sig
может принимать следующие
значения:  
SIGHUP "зависание"  
SIGINT прерывание  
SIGQUIT прекращение работы  
SIGILL запрещенная команда  
SIGTRAP внутреннее прерывание,
связанное с трассировкой  
SIGIOT инструкция IOT  
SIGEMT инструкция EMT  
SIGFPE особая ситуация при
работе с числами с плавающей
запятой  
SIGKILL удаление из системы  
SIGBUS ошибка в шине  
SIGSEGV нарушение сегментации  
SIGSYS недопустимый аргумент в
вызове системной функции  
SIGPIPE запись в канал при
отсутствии считывающих процессов  
SIGALRM сигнал тревоги  
SIGTERM завершение программы  
SIGUSR1 сигнал, определяемый
пользователем  
SIGUSR2 второй сигнал,
определяемый пользователем  
SIGCLD гибель потомка  
SIGPWR отказ питания  
Параметр function интерпретируется
следующим образом:  
SIG_DFL действие по умолчанию.
Означает завершение процесса в
случае поступления любых сигналов,
за исключением SIGPWR и SIGCLD. Если
сигнал имеет тип SIGQUIT, SIGILL, SIGTRAP, SIGIOT,
SIGEMT, SIGFPE, SIGBUS, SIGSEGV или SIGSYS, создается
файл "core", содержащий дамп
образа процесса в памяти  
SIG_IGN игнорировать поступление
сигнала функция адрес процедуры в
пространстве процесса. По
возвращении в режим задачи
производится обращение к указанной
функции с передачей ей номера
сигнала в качестве аргумента. Если
сигнал имеет тип, отличный от SIGILL,
SIGTRAP и SIGPWR, ядро автоматически
переустанавливает имя программы
обработки сигнала в SIG_DFL. Сигналы
типа SIGKILL процессом не
обрабатываются  
stat  
     stat(filename,statbuf)
      char *filename;
      struct stat *statbuf;
      fstat(fd,statbuf)
      int fd;
      struct stat *statbuf;
Функция stat возвращает информацию
о статусе (состоянии) указанного
файла. Функция fstat выполняет то же
самое в отношении открытого файла,
имеющего дескриптор fd. Структура
statbuf определена следующим образом:  
     struct stat {
            dev_t   st_dev;   /* номер устройства, на котором на-
                                 ходится файл */
            ino_t   st_ino;   /* номер индекса */
            ushort  st_mode;  /* тип файла  (см. mknod)  и  права
                                 доступа к нему (см. chmod) */
            short   st_nlink; /* число  связей,  указывающих на файл */
            ushort  st_uid;   /* код идентификации владельца файла */
            ushort  st_gid;   /* код идентификации группы */
            dev_t   st_rdev;  /* старший и младший номера устройства */
            off_t   st_size;  /* размер в байтах */
            time_t  st_atime; /* время последнего обращения */
            time_t  st_mtime; /* время последнего внесения  изменений */
            time_t  st_ctime; /* время последнего изменения  статуса */
      };
stimе  
     stime(tptr)
      long *tptr;
Функция stime устанавливает
системное время и дату в
соответствие со значением,
указанным в параметре tptr. Время
указывается в секундах от 00:00:00 1
января 1970 года по Гринвичу.  
synс  
     sync() 
Функция sync выгружает
содержащуюся в системных буферах
информацию (относящуюся к файловой
системе) на диск.  
timе  
     time(tloc)
      long *tloc;
Функция time возвращает системное
время в секундах от 00:00:00 1 января 1970
года по Гринвичу.  
times  
     #include <sys/types.h>
      #include <sys/times.h>
      times(tbuf)
      struct tms *tbuf;
Функция times возвращает время в
таймерных тиках, реально прошедшее
с любого произвольного момента в
прошлом, и заполняет буфер tbuf
следующей учетной информацией:  
     struct tms {
            time_t   tms_utime;  /* продолжительность использова-
                                    ния ЦП в режиме задачи */
            time_t   tms_stime;  /* продолжительность использова-
                                    ния ЦП в режиме ядра */
            time_t   tms_cutime; /* сумма  значений  tms_utime  и
                                    tms_cutime у потомков */
            time_t   tms_sutime; /* сумма  значений  tms_stime  и
                                    tms_sutime у потомков */
      };
ulimit  
     ulimit(cmd,limit)
      int cmd;
      long limit;
Функция ulimit дает процессу
возможность устанавливать
различные ограничения в
зависимости от значения параметра
cmd:  
1 вернуть максимальный размер
файла (в блоках по 512 байт), в который
процесс может вести запись  
2 установить ограничение сверху
на размер файла равным значению
параметра limit  
3 вернуть значение верхней точки
прерывания (максимальный доступный
адрес в области данных)  
uмask  
     umask(mask)
      int mask;
Функция umask устанавливает
значение маски, описывающей режим
создания файла (mask), и возвращает
старое значение. При создании файла
биты разрешения доступа, которым
соответствуют установленные
разряды в mask, будут сброшены.  
uмount  
     umount(specialfile)
      char *specialfile
Функция umount выполняет
демонтирование файловой системы,
расположенной на устройстве
ввода-вывода блоками specialfile.  
unamе  
     #include <sys/utsname.h>
      uname(name)
      struct utsname *name;
Функция uname возвращает
информацию, идентифицирующую
систему в соответствии со
следующей структурой:  
     struct utsname {
            char   sysname[9];  /* наименование */
            char   nodename[9]; /* имя сетевого узла */
            char   release[9];  /* информация о версии системы */
            char   version[9];  /* дополнительная  информация о версии */
            char   machine[9];  /* технический комплекс */
      };
unlink  
     unlink(filename)
      char *filename;
Функция unlink удаляет из каталога
запись об указанном файле.  
ustat  
     #include <sys/types.h>
      #include <ustat.h>
      ustat(dev,ubuf)
      int dev;
      struct ustat *ubuf;
Функция ustat возвращает
статистические данные,
характеризующие файловую систему с
идентификатором dev (старший и
младший номера устройства).
Структура ustat определена следующим
образом:  
     struct ustat {
            daddr_t  f_tfree;     /* количество  свободных   блоков */
            ino_t    f_tinode;    /* количество  свободных индексов */
            char     f_fname[6];  /* наименование файловой системы */
            char     f_fpack[6];  /* сокращенное    (упакованное)
                                     имя файловой системы */
      };
utimе  
     #include <sys/types.h>
      utime(filename,times)
      char *filename;
      struct utimbuf *times;
Функция utime переустанавливает
время последнего обращения к
указанному файлу и последнего
внесения изменений в соответствии
со значениями, на которые указывает
параметр times. Если параметр
содержит нулевое значение,
используется текущее время. В
противном случае параметр
указывает на следующую структуру:  
     struct utimbuf {
            time_t   axtime;   /* время последнего обращения */
            time_t   modtime;  /* время последнего внесения изменений */
      };
Все значения отсчитываются от
00:00:00 1 января 1970 года по Гринвичу.  
wait  
     wait(wait_stat)
      int *wait_stat;
Функция wait побуждает процесс
приостановить свое выполнение до
момента завершения потомка или до
момента приостанова трассируемого
процесса. Если значение параметра
wait_stat ненулевое, оно представляет
собой адрес, по которому функция
записывает возвращаемую процессу
информацию. При этом используются
только 16 младших разрядов кода
возврата. Если обнаружен
завершивший свое выполнение
потомок, 8 младших разрядов кода
возврата содержат 0, а 8 старших
разрядов - код возврата (аргумент)
функции exit. Если потомок завершил
свое выполнение в результате
получения сигнала, код возврата
функции exit содержит номер сигнала.
Кроме того, если образ
процесса-потомка сохранен в файле
"core", производится установка
бита 0200. Если обнаружен
приостановивший свое выполнение
трассируемый процесс, 8 старших
разрядов кода возврата функции wait
содержат номер приведшего к его
приостанову сигнала, а 8 младших
разрядов - восьмиричное число 0177.  
writе  
     write(fd,buf,count)
      int fd,count;
      char *buf;
Функция write выполняет запись
указанного в count количества байт
данных, начиная с адреса buf, в файл с
дескриптором fd.  
Предыдущая
глава || Оглавление
|| Следующая глава 
  
 
 |