Главная страница

Лекция 1 - Среда исполнения. Среда исполнения введение


Скачать 155.5 Kb.
НазваниеСреда исполнения введение
Дата24.03.2022
Размер155.5 Kb.
Формат файлаdoc
Имя файлаЛекция 1 - Среда исполнения.doc
ТипПрограмма
#412377
страница6 из 7
1   2   3   4   5   6   7

Системные вызовы для доступа к среде исполнения процесса


. Идентификатор процесса:

- getpid(2) возвращает идентификатор процесса. Например: pid=getpid();

- getppid(2) возвращает идентификатор родительского процесса. Например: ppid=getppid();

- getpgid(2) возвращает идентификатор группы для процесса, идентификатор которого равен pid, или для вызывающего процесса, если pid равен 0. Например: pgid=getpgid(0); Замечание: группы процессов обсуждаются позже в этом курсе.

- setpgid(2) устанавливает идентификатор группы процесса.

- getsid(2) возвращает идентификатор сессии для процесса, идентификатор которого равен pid, или для вызывающего процесса, если pid равен 0. Например: sid=getsid(0);

- setsid(2): создает новую сессию и делает текущий процесс её лидером, или (что то же самое) устанавливает идентификаторы группы и сессии вызывающего процесса равными значению идентификатора данного процесса и освобождает управляющий терминал.

. Идентификаторы пользователя и группы

- getuid(2) возвращает реальный идентификатор пользователя. Например: uid=getuid();

- geteuid(2) возвращает эффективный идентификатор пользователя. Например: euid=geteuid(); Замечание: обычно реальный и эффективный идентификаторы совпадают. Способы установки идентификатора пользователя обсуждаются далее в этом разделе.

- getgid(2) возвращает реальный идентификатор группы. Например: gid=getgid();

- getegid(2) возвращает эффективный идентификатор группы. Например: egid=getegid(2);

- setuid(2), setgid(2) устанавливают идентификаторы пользователя и группы. Замечание: только суперпользователь (super-user) может устанавливать произвольные значения uid. Все остальные могут приравнять реальный uid эффективному или эффективный реальному.

- setgroups(2) устанавливает список групп доступа вызываемого процесса. Замечание: только суперпользователь может исполнять этот системный вызов.

- getgroups(2) получает список групп доступа вызываемого процесса. group(1) использует getgroups(2) для печати списка групп доступа данного пользователя.

- initgroups(3C) инициализирует список групп доступа всеми группами, которым принадлежит учетная запись. Только суперпользователь может выполнять этот системный вызов.

. Ресурсы процесса:

- getrlimit(2) получает информацию о некоторых программных и аппаратных ограничениях процесса.

- setrlimit(2) устанавливает некоторые программные и аппаратные ограничения процесса.

. Терминал процесса

- ttyname(3C) возвращает путевое имя специального терминального файла с заданным дескриптором. Например: char *buf; buf=ttyname(0);

Системные вызовы для доступа к системным параметрам


В ядре Unix есть ряд глобальных настроек, которые влияют на исполнение процессов или отдельных системных вызовов. Некоторые из этих параметров могут устанавливаться в конфигурационных файлах ядра и изменяются после перезагрузки системы. Некоторые другие параметры можно изменять только путем перекомпиляции ядра. Некоторые параметры, например, максимальная длина имени файла, зависят от файловой системы.

В старых учебниках, для проверки значения этих параметров рекомендовалось использовать препроцессорные макросы, определенные в заголовочном файле . В Solaris этот файл генерируется автоматически при генерации системы=, и значения в нем соответствуют значениям, использованным при компиляции ядра системы. Если программа исполняется на другой версии ядра, значения некоторых параметров могут измениться.

Так, в определена символьная константа PATH_MAX, обозначающая максимальную длину путевого имени файла. В Solaris 11 эта константа равна 1024. Если в Solaris 12 по каким-то причинам этот лимит будет увеличен, то ваша программа не сможет работать с некоторыми файлами. Чтобы адаптировать вашу программу к новому ядру, ее необходимо будет перекомпилировать.

Чтобы избежать перекомпиляции прикладных программ, в действующей версии стандарта POSIX были введены системные вызовы, позволяющие определить во время исполнения параметры ядра системы и налагаемые этими параметрами ограничения.

Системный вызов sysconf(2) имеет один параметр, имя запрашиваемой системной переменной. Имена определены в заголовочном файле ; их полный список приведен на странице руководства sysconf(2). При обсуждении некоторых системных вызовов в этом курсе будут упоминаться параметры sysconf, влияющие на поведение соответствующего вызова.

Пример - определение максимальной длины имени часового пояса (допустимое значение переменной TZ):

long val; val=sysconf(_SC_TZNAME_MAX);

Системные вызовы pathconf(2) и fpathconf(2) используется для получения параметров, связанных с файловой системой. Большинство из этих параметров могут быть различны для разных файловых систем, а некоторые также могут различаться и для. Поскольку в Unix практически любая директория может использоваться в качестве точки монтирования другой файловой системы, такие параметры необходимо заново запрашивать в каждой новой директории.

Параметры pathconf и fpathconf

fd — дескриптор открытого файла (это понятие будет обсуждаться в разделе «Файловый ввод-вывод»). Параметры будут определены для файловой системы, в которой размещен этот файл.

path — путевое имя файла или каталога, определяющее файловую систему, для которой необходимо определить параметр.

name — имя параметра. В качестве имен рекомендуется использовать символьные константы, определенные в . Полный список имен приведен на странице руководства pathconf(2).

Пример — определение максимальной допустимой длины путевого имени файла:

long val; val=pathconf("/", _PC_PATH_MAX);
1   2   3   4   5   6   7


написать администратору сайта