Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В исходном коде Linux вы сможете найти в команде
id
getuid
Для просмотра всех данных файла учетных записей пользователей можно воспользоваться функцией
getpwent
<b>#include <pwd.h></b>
<b>#include <sys/types.h></b>
<b>void endpwent(void);</b>
<b>struct passwd *getpwent(void);</b>
<b>void setpwent(void);</b>
Функция
getpwent
endpwent
setpwent
getpwent
opendir
readdir
closedir
Идентификаторы пользователя и группы (эффективный или действующий и реальный) можно получить с помощью других реже используемых функций:
<b>#include <sys/types.h></b>
<b>#include <unistd.h></b>
<b>uid_t geteuid(void);</b>
<b>gid_t getgid(void);</b>
<b>gid_t getegid(void);</b>
<b>int setuid(uid_t uid);</b>
<b>int setgid(gid_t gid);</b>
Подробную информацию об идентификаторах группы и эффективных идентификаторах пользователей следует искать на страницах интерактивного справочного руководства системы, хотя, быть может, вы решите, что вам вообще не следует манипулировать ими.
Только суперпользователь может вызывать функции
setuid
setgid
Информация о компьютере
Программа может установить некоторые подробные сведения о компьютере, на котором выполняется, так же, как она определяет информацию о пользователе. Подобную информацию предоставляет команда
uname
man 2 uname
Сведения о рабочем компьютере могут оказаться полезными в ряде ситуаций. Вы можете захотеть настроить поведение программы в зависимости от сетевого имени машины, на которой она выполняется, скажем, на студенческом компьютере или машине администратора. Для соблюдения лицензионных соглашений вам может потребоваться ограничить выполнение программы одной машиной. Все это означает, что вам нужен способ определения компьютера, на котором выполняется программа.
Если в системе установлены сетевые компоненты, вы очень легко можете получить сетевое имя компьютера с помощью функции
gethostname
<b>#include <unistd.h></b>
<b>int gethostname(char *name, size_t namelen);</b>
Эта функция записывает сетевое имя машины в строку
name
namelen
gethostname
Более подробную информацию о рабочем компьютере можно получить с помощью системного вызова
uname
<b>#include <sys/utsname.h></b>
<b>int uname(struct utsname *name);</b>
Функция 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.
Далее приведена программа 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 informationn");
exit(1);
}
printf("Computer host name is %sn", computer);
printf("System is %s on %s hardwaren", uts.sysname, uts.machine);
printf("Nodename is %sn", uts.nodename);
printf("Version is %s, %sn", uts.release, uts.version);