Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Разработка приложений в среде Linux. Второе издание: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

Разработка приложений в среде Linux. Второе издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Команда idиспользует многие из этих функций и предлагает несколько хороших примеров работы с ними. Она также использует некоторые функциональные возможности ядра, описанные в главе 10.

1: /* id.с */

2:

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9: #include

10:

11: void usage (int die, char *error) {

12: fprintf(stderr, "Использование: id [<���имя_пользователя>]\n") ;

13: if (error) fprintf(stderr, "%s\n", error);

14: if (die) exit(die);

15: }

16:

17: void die(char *error) {

18: if (error) fprintf(stderr, "%s\n", error);

19: exit(3);

20: }

21:

22: int main(int argc, const char *argv[]) {

23: struct passwd *pw;

24: struct group *gp;

25: int current_user = 0;

26: uid_t id;

27: int i;

28:

29: if (argc > 2)

30: usage(1, NULL);

31:

32: if (argc == 1) {

33: id = getuid();

34: current_user = 1;

35: if (!(pw = getpwuid(id)))

36: usage(1, "Имя пользователя не существует");

37: } else {

38: if (!(pw = getpwnam(argv[1])))

39: usage(1, "Имя пользователя не существует");

40: id = pw->pw_uid;

41: }

42:

43: printf("uid=%d(%s)", id, pw->pw_name);

44: if ((gp = getgrgid(pw->pw_gid)))

45: printf(" gid=%d(%s)", pw->pw_gid, gp->gr_name);

46:

47: if (current_user) {

48: gid_t *gid_list;

49: int gid_size;

50:

51: if (getuid() != geteuid()) {

52: id = geteuid();

53: if (!(pw = getpwuid(id)))

54: usage(1, "Имя пользователя не существует");

55: printf(" euid=%d(%s)", id, pw->pw_name);

56: }

57:

58: if (getgid() != getegid()) {

59: id = getegid();

60: if (!(gp = getgrgid(id)))

61: usage(1, "Группа не существует");

62: printf(" egid=%d(%s)", id, gp->gr_name);

63: }

64:

65: /* использование интерфейса getgroups для получения текущих групп */

66: gid_size = getgroups(0, NULL);

67: if (gid_size) {

68: gid_list = malloc(gid_size * sizeof(gid_t));

69: getgroups(gid_size, gid_list);

70:

71: for (i = 0; i < gid_size; i++) {

72: if (!(gp = getgrgid(gid_list[i])))

73: die("Группа не существует");

74: printf("%s%d(%s)", (i == 0) ? " groups=" : ",",

75: gp->gr_gid, gp->gr_name);

76: }

77:

78: free(gid_list);

79: }

80: } else {

81: /* получение списка групп из базы данных групп */

82: i = 0;

83: while ((gp = getgrent())) {

84: char *c = * (gp->gr_mem);

85:

86: while (c && *c) {

87: if (!strncmp(c, pw->pw_name, 16)) {

88: printf("%s%d(%s)",

89: (i++ == 0) ? " groups=" : ",",

90: gp->gr_gid, gp->gr_name);

91: с = NULL;

92: } else {

93: c++;

94: }

95: }

96: }

97: endgrent();

98: }

99:

100: printf("\n");

101: exit(0);

102: }

Код обработки аргументов, который начинается в строке 29, обращается к нескольким важным функциям. При вызове без аргументов командной строки idпроизводит поиск информации, основанной на том, какую программу запустил пользователь, и сообщает об этом. Описание функции getuid()можно найти в главе 10; она возвращает идентификатор пользователя процесса, который вызвал его. Затем функция getpwuid()производит поиск элемента в файле паролей для данного идентификатора пользователя. Если программе idв качестве аргумента командной строки будет задано имя пользователя, то вместо этого она будет искать элемент, основанный на заданном имени, независимо от идентификатора пользователя, запустившего его.

Вначале программа idвыводит имя и числовой идентификатор пользователя. Файл паролей содержит имя главной группы пользователя. Если эта группа существует в файле групп, idвыводит его номер и имя.

В главе 10 описаны все различные формы идентификаторов, используемых в ядре. Программа idдолжна применять функции geteuid()и getegid()для проверки uidи gidи выводить их, если они отличаются от эффективных uidи gid.И снова, структуры паролей и групп просматриваются по числовому идентификатору.

В завершение программа idдолжна вывести все дополнительные группы. Здесь кроется маленькая хитрость, поскольку определить список дополнительных групп можно двумя способами. Если пользователь запускает программу idбез аргументов, то idбудет использовать функцию getgroups(), чтобы определить, к какой группе принадлежит пользователь. В противном случае она получает список групп не из базы данных групп.

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Разработка приложений в среде Linux. Второе издание»

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x