Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

int setgid(gid_t gid);

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

Примечание

Только суперпользователь может вызывать функции

setuid
и
setgid
.

Информация о компьютере

Программа может установить некоторые подробные сведения о компьютере, на котором выполняется, так же, как она определяет информацию о пользователе. Подобную информацию предоставляет команда

uname
, в программе на языке С можно использовать для получения этих данных одноименный системный вызов — прочтите о нем в разделе системных вызовов интерактивного справочного руководства (раздел 2) с помощью команды
man 2 uname
.

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

Если в системе установлены сетевые компоненты, вы очень легко можете получить сетевое имя компьютера с помощью функции

gethostname
:

#include <unistd.h>

int gethostname(char *name, size_t namelen);

Эта функция записывает сетевое имя машины в строку

name
. Предполагается, что длина строки, как минимум,
namelen
символов. Функция
gethostname
возвращает 0 в случае успешного завершения и -1 в противном случае.

Более подробную информацию о рабочем компьютере можно получить с помощью системного вызова

uname
.

#include <sys/utsname.h>

int uname(struct utsname *name);

Функция uname записывает информацию о компьютере в структуру, на которую указывает параметр name. Структура типа utsname, определенная в файле sys/utsname.h, обязательно должна включать элементы, перечисленные в табл. 4.5.

Таблица 4.5

Элемент структуры
utsname
Описание
char sysname[]
Имя операционной системы
char nodename[]
Имя компьютера
char release[]
Номер выпуска (релиза) системы
char version[]
Номер версии системы
char machine[]
Аппаратный тип

В случае успешного завершения функция

uname
возвращает неотрицательное целое и в противном случае с установленной переменной
errno
для обозначения любой возникшей ошибки.

Выполните упражнение 4.12.

Упражнение 4.12. Информации о компьютере

Далее приведена программа hostget.c, извлекающая некоторые сведения о рабочем компьютере.

#include <sys/utsname.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

int main {

 char computer[256];

 struct utsname uts;

 if (gethostname(computer, 255) != 0 || uname(&uts) < 0) {

fprintf(stderr, "Could not get host information\n");

exit(1);

 }

 printf("Computer host name is %s\n", computer);

 printf("System is %s on %s hardware\n", uts.sysname, uts.machine);

 printf("Nodename is %s\n", uts.nodename);

 printf("Version is %s, %s\n", uts.release, uts.version);

 exit(0);

}

Она отобразит следующие зависящие от ОС Linux данные. Если ваша машина включена в сеть, то вы увидите расширенное имя компьютера, включающее обозначение сети:

$ ./hostget

Computer host name is suse103

System is Linux on i686 hardware

Nodename is suse103

Version is 2.6.20.2-2-default, #1 SMP Fri Mar 9 21:54:10 UTC 2007

  • Читать дальше
  • 1
  • ...
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: