Разработка приложений в среде Linux. Второе издание
Шрифт:
123: printf("Запуск оболочки...\n");
124: system("exec bash -");
125:
126: /* Здесь мы могли бы использовать wait4, если бы организовывали
127: ветвление вместо вызова system */
128: с = pam_close_session(pamh, 0);
129: check_success(pamh, с);
130: }
131:
132: /*
Реальные приложения могли бы сообщать о сбое вместо
133: * выхода, что мы и делали в check_success на каждой стадии,
134: * поэтому в таких случаях с может иметь значения, отличные
135: * от PAM_SUCCESS.
136: */
137: с = pam_end(pamh, с);
138: check_success(pamh, с);
139:
140: return 0;
141: }
Приложения
Приложение A
Заголовочные файлы
В этом приложении показаны все локальные заголовочные файлы для исходного кода, рассмотренного в книге.
1: /* libhello.h */
2:
3: #ifndef LIBHELLO_H_
4: #define LIBHELLO_H_
5:
6: void print_hello(void);
7:
8: #endif /* LIBHELLO_H_ */
1: /* ptypair.h */
2:
3: #ifndef _PTYPAIR_H
4: #define _PTYPAIR_H
5: int get_master_pty(char **name);
6: int get_slave_pty(char *name);
7: #endif /* _PTYPAIR_H */
1: /* sockutil.h */
2:
3: void die(char * message);
4: void copyData(int from, int to);
5: #ifndef CMSG_DATA
6: #define CMSG_DATA (cmsg) ((cmsg)->cmsg_data)
7: #endif
Приложение Б
Исходный код
ladsh
1: /* ladsh4.c */
2:
3: #define _GNU_SOURCE
4:
5: #include <ctype.h>
6: #include <errno.h>
7: #include <fcntl.h>
8: #include <glob.h>
9: #include <signal.h>
10: #include <stdio.h>
11: #include <stdlib.h>
12: #include <string.h>
13: #include <sys/ioctl.h>
14: #include <sys/wait.h>
15: #include <unistd.h>
16:
17: #define MAX_COMMAND_LEN 250 /*
максимальная длина одной
18: командной строки */
19: #define JOB_STATUS_FORMAT "[%d] %-22s %.40s\n"
20:
21: struct jobSet {
22: struct job * head; /* заголовок списка выполняющихся заданий */
23: struct job * fg; /* текущее высокоприоритетное задание */
24: };
25:
26: enum redirectionType { REDIRECT_INPUT, REDIRECT_OVERWRITE,
27: REDIRECT_APPEND };
28:
29: struct redirectionSpecifier {
30: enum redirectionType type; /* тип переадресации */
31: int fd; /* переадресация fd */
32: char * filename; /* файл, в который будет переадресовано fd */
33: };
34:
35: struct childProgram {
36: pid_t pid; /* 0 в случае выхода */
37: char ** argv; /* имя программы и аргументы */
38: int numRedirections; /* элементы в массиве переадресации */
39: struct redirectionSpecifier* redirections; /* переадресации ввода-вывода */
40: glob_t globResult; /* результат универсализации параметра */
41: int freeGlob; /* нужно ли освобождать globResult? */
42: int isStopped; /* выполняется ли в данный момент программа?*/
43: };
44:
45: struct job {
46: int jobId; /* номер задания */
47: int numProgs; /* количество программ в задании */
48: int runningProgs; /* количество выполняющихся программ */
49: char * text; /* имя задания */
50: char * cmdBuf; /* буфер, на который ссылаются различные массивы argv */
51: pid_t pgrp; /* идентификатор группы процесса для задания */
Поделиться:
Популярные книги
Печать Пожирателя
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мастер 2
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Нечто чудесное
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Клан
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Имя нам Легион. Том 3
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Запасная дочь
Фантастика:
фэнтези
6.40
рейтинг книги
Убивать чтобы жить 7
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
У врага за пазухой
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
Кодекс Охотника. Книга XXI
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Генерал Скала и ученица
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Оцифрованный. Том 1
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Его маленькая большая женщина
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Хуррит
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00