самое происходит, если значению uid равен код, сохраненный после выполнения
setuid-программы, запускаемой с помощью функции exec. Функция setgid имеет
тот же смысл по отношению к аналогичным групповым кодам.


    shmctl


______________________________

#include
#include
#include

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; /* идентификатор про-
цесса, связанного с

413

последней операцией
над областью */
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
#include
#include

shmget(key,size,flag)
key_t key;
int size,flag;

Функция shmget обращается к области разделяемой памяти или создает ее.
Параметр size задает размер области в байтах. Параметры key и flag имеют тот
же смысл, что и в функции msgget.


    shмор


______________________________

#include
#include
#include

shmat(id,addr,flag)
int id,flag;
char *addr;

shmdt(addr)
char *addr;


414

Функция shmat присоединяет область разделяемой памяти, ассоциированную с
идентификатором id, к адресному пространству процесса. Если параметр addr
имеет нулевое значение, ядро само выбирает для присоединения области подхо-
дящий адрес. В противном случае оно пытается присоединить область, используя
в качестве значение параметра addr в качестве адреса. Если в параметре flag
установлен бит SHM_RND, ядро в случае необходимости округляет адрес. Функция
shmat возвращает адрес, по которому область присоединяется фактически.
Функция shmdt отсоединяет область разделяемой памяти, присоединенную ра-
нее по адресу addr.


    signal


______________________________

#include

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 процессом
не обрабатываются

415



.te1 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; /* время последнего изменения статуса */
};


    stiме


______________________________

stime(tptr)
long *tptr;

Функция stime устанавливает системное время и дату в соответствие со
значением, указанным в параметре tptr. Время указывается в секундах от
00:00:00 1 января 1970 года по Гринвичу.


    syпс


______________________________

sync()

Функция sync выгружает содержащуюся в системных буферах информацию (от-
носящуюся к файловой системе) на диск.


    tiме


______________________________

time(tloc)


416

long *tloc;

Функция time возвращает системное время в секундах от 00:00:00 1 января
1970 года по Гринвичу.


    times


______________________________

#include
#include

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 у потомков */
};


    иlimit


______________________________

ulimit(cmd,limit)
int cmd;
long limit;

Функция ulimit дает процессу возможность устанавливать различные ограни-
чения в зависимости от значения параметра cmd:

1 вернуть максимальный размер файла (в блоках по 512 байт), в который
процесс может вести запись
2 установить ограничение сверху на размер файла равным значению пара-
метра limit
3 вернуть значение верхней точки прерывания (максимальный доступный
адрес в области данных)


    имask


______________________________

umask(mask)
int mask;

Функция umask устанавливает значение маски, описывающей режим создания
файла (mask), и возвращает старое значение. При создании файла биты разреше-
ния доступа, которым соответствуют установленные разряды в mask, будут сбро-
шены.

417


    имount


______________________________

umount(specialfile)
char *specialfile

Функция umount выполняет демонтирование файловой системы, расположенной
на устройстве ввода-вывода блоками specialfile.


    ипaме


______________________________

#include

uname(name)
struct utsname *name;

Функция uname возвращает информацию, идентифицирующую систему в соответ-
ствии со следующей структурой:

struct utsname {
char sysname[9]; /* наименование */
char nodename[9]; /* имя сетевого узла */
char release[9]; /* информация о версии системы */
char version[9]; /* дополнительная информация о версии */
char machine[9]; /* технический комплекс */
};


    ипlink


______________________________

unlink(filename)
char *filename;

Функция unlink удаляет из каталога запись об указанном файле.


    иstat


______________________________

#include
#include

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]; /* сокращенное (упакованное)

418

имя файловой системы */
};


    иtiме


______________________________

#include

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.



419


    БИБЛИОГРАФИЯ




[Babaoglu 81] Babaoglu, O., and W.Joy, "Converting a Swap-Based System
to do Paging in an Architecture Lacking Page-Referenced Bits",
Proceedings of the 8th Symposium on Operating Systems Principles,
ACM Operating Systems Review, Vol. 15(5), Dec. 1981, pp. 78-86.
[Bach 84] Bach, M.J., and S.J.Buroff, "Multiprocessor UNIX Systems",
AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No.
8, Part 2, pp. 1733-1750.
[Barak 80] Barak, A.B. and Aapir, "UNIX with Satellite Processors",
Software - Practice and Experience, Vol. 10, 1980, pp. 383-392.
[Beck 85] Beck, B. and B.Kasten, "VLSI Assist in Building a
Multiprocessor UNIX System", Proceedings of the USENIX Association
Summer Conference, June 1985, pp. 255-275.
[Berkeley 83] UNIX Programmer's Manual, 4.2 Berkeley Software
Distribution, Virtual VAX-11 Version, Computer Science Division,
Department of Electrical Engineering and Computer Science,
University of California at Berkeley, August 1983.
[Birrell 84] Birrell, A.D. and B.J.Nelson, "Implementing Remote
Procedure Calls", ACM Transactions on Computer Systems, Vol. 2,
No. 1, Feb. 1984, pp. 39-59.
[Bodenstab 84] Bodenstab, D.E., T.F.Houghton, K.A.Kelleman, G.Ronkin,
and E.P.Schan, "UNIX Operating System Porting Experiences", AT&T
Bell Laboratories Technical Journal, Vol. 63, No. 8, Oct. 1984,
pp. 1769-1790.
[Bourne 78] Bourne, S.R., "The UNIX Shell", The Bell System Technical
Journal, July-August 1978, Vol. 57, No. 6, Part 2, pp. 1971-1990.
[Bourne 83] Bourne, S.R., The UNIX System, Addison-Wesley, Reading, MA,
1983.
[Brownbridge 82] Brownbridge, D.R., L.F.Marshall, and B.Randell, "The
Newcastle Connection or UNIXes of the World Unite!" in Software -
Practice and Experience, Vol. 12, 1982, pp. 1147-1162.
[Bunt 76] Bunt, R.B., "Scheduling Techniques for Operating Systems",
Computer, Oct. 1976, pp. 10-17.
[Christian 83] Christian, K., The UNIX Operating System, John Wiley &
Sons Inc., New York, NY, 1983.
[Coffman 73] Coffman, E.G., and P.J.Denning, Operating Systems Theory,
Prentice-Hall Inc., Englewood Cliffs, NJ, 1973.
[Cole 85] Cole, C.T., P.B.Flinn, and A.B.Atlas, "An Implementation of an
Extended File System for UNIX", Proceedings of the USENIX
Conference, Summer 1985, pp. 131-149.
[Denning 68] Denning, P.J., "The Working Set Model for Program Behavior,
Communications of the ACM, Volume 11, No. 5, May 1968, pp.
323-333.
[Dijkstra 65] Dijkstra, E.W., "Solution of a Problem in Concurrent
Program Control", CACM, Vol. 8, No. 9, Sept. 1965, p. 569.
[Dijkstra 68] Dijkstra, E.W., "Cooperating Sequential Processes", in
Programming Languages, ed. F.Genuys, Academic Press, New York, NY,
1968.
[Felton 84] Felton, W.A., G.L.Miller, and J.M.Milner, "A UNIX
Implementation for System/370", AT&T Bell Laboratories Technical
Journal, Vol. 63, No. 8, Oct. 1984, pp. 1751- 1767.
[Goble 81] Goble, G.H. and M.H.Marsh, "A Dual Processor VAX 11/780",
Purdue University Technical Report, TR-EE 81-31, Sept. 1981.
[Henry 84] Henry, G.J., "The Fair Share Scheduler", AT&T Bell
Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2,
pp. 1845-1858.

420

[Holley 79] Holley, L.H., R.P421rmelee, C.A.Salisbury, and D. N.Saul,
"VM/370 Asymmetric Multiprocessing", IBM Systems Journal, Vol. 18,
No. 1, 1979, pp. 47-70.
[Holt 83] Holt, R.C., Concurrent Euclid, the UNIX System, and Tunis,
Addison-Wesley, Reading, MA, 1983.
[Horning 73] Horning, J.J., and B.Randell, "Process Structuring",
Computing Surveys, Vol. 5, No. 1, March 1973, pp. 5-30.
[Hunter 84] Hunter, C.B. and E.Farquhar, "Introduction to the NSI16000
Architecture", IEEE Micro, April 1984, pp. 26- 47.
[Johnson 78] Johnson, S.C. and D.M.Ritchie, "Portability of C Programs
and the UNIX System", The Bell System Technical Journal, Vol. 57,
No. 6, Part 2, July-August, 1978, pp. 2021-2048.
[Kavaler 83] Kavaler, P. and A.Greenspan, "Extending UNIX to Local-Area
Networks", Mini-Micro Systems, Sept. 1983, pp. 197-202.
[Kernighan 78] Kernighan, B.W., and D.M.Ritchie, The C Programming
Language, Prentice-Hall, Englewood Cliffs, NJ, 1978.
[Kernighan 84] Kernighan, B.W., and R.Pike, The UNIX Programming
Environment, Prentice-Hall, Englewood Cliffs, NJ, 1984.
[Killian 84] Killian, T.J., "Processes as Files", Proceedings of the
USENIX Conference, Summer 1984, pp. 203-207.
[Levy 80] Levy, H.M., and R.H.Eckhouse, Computer Programming and
Architecture: The VAX-11, Digital Press, Bedford, MA, 1980.
[levy 82] Levy, H.M., and P.H.Lipman, "Virtual Memory Management in the
VAX/VMS Operating System", Computer, Vol. 15, No. 3, March 1982,
pp. 35-41.
[Lu 83] Lu, P.M., W.A.Dietrich, et. al., "Architecture of a VLSI MAP for
BELLMAC-32 Microprocessor", Proc. of IEEE Spring Compcon, Feb. 28,
1983, pp. 213-217.
[Luderer 81] Luderer, G.W.R., H.Che, J.P.Haggerty, P.A.Kirslis, and
W.T.Marshall, "A Distributed UNIX System Based on a Virtual
Circuit Switch", Proceedings of the Eighth Symposium on Operating
Systems Principles, Asilomar, California, December 14-16, 1981.
[Lycklama 78a] Lycklama, H. and D.L.Bayer, "The MERT Operating System",
The Bell System Technical Journal, Vol. 57, No. 6, Part 2,
July-August 1978, pp. 2049-2086.
[Lycklama 78b] Lycklama, H. and C.Christensen, "A Minicomputer Satellite
Processor System", The Bell System Technical Journal, Vol. 57, No.
6, Part 2, July- August 1978, pp. 2103-2114.
[McKusick 84] McKusick, M.K., W.N.Joy, S.J.Leffler, and R.S. Fabry, "A
Fast File System for UNIX", ACM Transactions on Computer Systems,
Vol. 2(3), August 1984, pp. 181-197.
[Mullender 84] Mullender, S.J. and A.S.Tanenbaum, "Immediate Files",
Software - Practice and Experience, Vol. 14(4), April 1984, pp.
365-368.
[Nowitz 80] Nowitz, D.A. and M.E.Lesk, "Implementation of a Dial-Up
Network of UNIX Systems", IEEE Proceedings of Fall 1980 COMPCON,
Washington, D.C., pp. 483-486.
[Organick 72] Organick, E.J., The Multics System: An Examination of Its
Structure", The MIT Press, Cambridge, MA, 1972.
[Peachey 84] Peachey, D.R., R.B.Bunt, C.L.Williamson, and T.B.Brecht,
"An Experimental Investigation of Scheduling Strategies for UNIX",
Performance Evaluation Review, 1984 SIGMETRICS Conference on
Measurement and Evaluation of Computer Systems, Vol. 12(3), August
1984, pp. 158-166.
[Peterson 83] Peterson, James L. and A.Silberschatz, Operating System
Concepts, Addison-Wesley, Reading, MA, 1983.
[Pike 84] Pike, R., "The Blit: A Multiplexed Graphics Terminal", AT&T
Bell Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8,
Part 2, pp. 1607-1632.

421

[Pike 85] Pike, R., and P.Weinberger, "The Hideous Name", Proceedings of
the USENIX Conference, Summer 1985, pp. 563-568.
[Postel 80] Postel, J. (ed.), "DOD Standart Transmission Control
Protocol", ACM Computer Communication Review, Vol. 10, No. 4, Oct.
1980, pp. 52-132.
[Postel 81] Postel, J., C.A.Sunshine, and D.Cohen, "The ARPA Internet
Protocol", Computer Networks, Vol. 5, No. 4, July 1981, pp.
261-271.
[Raleigh 76] Raleigh, T.M., "Introduction to Scheduling and Switching
under UNIX", Proceedings of the Digital Equipment Computer Users
Society, Atlanta, Ga., May 1976, pp. 867-877.
[Richards 69] Richards, M., "BCPL: A Tool for Compiler Writing and
Systems Programming", Proc. AFIPS SJCC 34, 1969, pp. 557-566.
[Ritchie 78a] Ritchie, D.M. and K.Thompson, "The UNIX Time-Sharing
System", The Bell System Technical Journal, July-August 1978, Vol.
57, No. 6, Part 2, pp. 1905-1930.
[Ritchie 78b] Ritchie, D.M., "A Retrospective", The Bell System
Technical Journal, July-August 1978, Vol. 57, No. 6, Part 2, pp.
1947-1970.
[Ritchie 81] Ritchie, D.M. and K.Thompson, "Some Further Aspects of the
UNIX Time-Sharing System", Mini-Micro Software, Vol. 6, No. 3,
1981, pp. 9-12.
[Ritchie 84a] Ritchie, D.M., "The Evolution of the UNIX Time- sharing
System", AT&T Bell Laboratories Technical Journal, Oct. 1984, Vol.
63, No. 8, Part 2, pp. 1577-1594.
[Ritchie 84b] Ritchie, D.M., "A Stream Input Output System", AT&T Bell
Laboratories Technical Journal, Oct. 1984, Vol. 63, No. 8, Part 2,
pp. 1897-1910.
[Rochkind 85] Rochkind, M.J., Advanced UNIX Programming, Prentice-Hall,
1985.
[Saltzer 66] Saltzer, J.H., Traffic Control in a Multiplexed Computer
System, Ph.D. Thesis, MIT, 1966.
[Sandberg 85] Sandberg, R., D.Goldberg, S.Kleiman, D.Walsh, and B.Lyon,
"Design and Implementation of the Sun Network Filesystem",
Proceedings of the USENIX Conference, Summer 1985, pp. 119-131.
[SVID 85] System V Interface Definition, Spring 1985, Issue 1, AT&T
Customer Information Center, Indianapolis, IN.
[System V 84a] UNIX System V User Reference Manual.
[System V 84b] UNIX System V Administrator's Manual.
[Thompson 74] Thompson, K. and D.M.Ritchie, "The UNIX Time-Sharing
System", Communications of the ACM, Vol. 17, No. 7, July, 1974,
pp. 365-375 (исправлено и перепечатано в [Ritchie 78a]).
[Thompson 78] Thompson, K., "UNIX Implementation", The Bell System
Technical Journal, Vol. 57, No. 6, Part 2, July- August, 1978, pp.
1931-1946.
[Weinberger 84] Weinberger, P.J., "Cheap Dynamic Instruction Counting",
The AT&T Bell Laboratories Technical Journal, Vol. 63, No. 6, Part
2, October 1984, pp. 1815-1826.












422