Чтение онлайн

на главную - закладки

Жанры

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

Троан Эрик В.

Шрифт:

 66: closedir(dir);

 67:

 68: return 0;

 69: }

 70:

 71: /* Сканирует путь каталога в поисках изменений предыдущего

 72: содержимого, как указано *listPtr. Связанный список

 73: обновляется новым содержимым, и выводятся сообщения,

 74: описывающие произошедшие изменения. */

 75: int updateDirectoryList(char * path, struct fileInfo ** listPtr) {

 76: DIR * dir;

 77: struct dirent * ent;

 78: struct fileInfo * list = *listPtr;

 79: struct fileInfo * file, * prev;

 80:

 81: if (!(dir = opendir(path))) {

 82: perror("opendir");

 83: return 1;

 84: }

 85:

 86: for (file = list; file; file = file->next)

 87: file->exists = 0;

 88:

 89: while ((ent = readdir(dir))) {

 90: file = list;

 91: while (file && strcmp(file->name, ent->d_name))

 92: file = file->next;

 93:

 94: if (!file) {

 95: /*
новый файл, добавить его имя в список */

 96: printf("%s создан в %s\n", ent->d_name, path);

 97: file = malloc(sizeof(*file));

 98: file->name = strdup(ent->d_name);

 99: file->next = list;

100: file->exists = 1;

101: list = file;

102: } else {

103: file->exists = 1;

104: }

105: }

106:

107: closedir(dir);

108:

109: file = list;

110: prev = NULL;

111: while (file) {

112: if (!file->exists) {

113: printf("%s удален из %s\n", file->name, path);

114: free(file->name);

115:

116: if (!prev) {

117: /* удалить головной узел */

118: list = file->next;

119: free(file);

120: file = list;

121: } else {

122: prev->next = file->next;

123: free(file);

124: file = prev->next;

125: }

126: } else {

127: prev = file;

128: file = file->next;

129: }

130: }

131:

132: *listPtr = list;

133:

134: return 0;

135: }

136:

137: void handler(int sig, siginfo_t * siginfo, void * context) {

138: int i;

139:

140: for (i = 0; directoryList[i].path; i++) {

141: if (directoryList[i].fd == siginfo->si_fd) {

142: directoryList[i].changed = 1;

143: return;

144: }

145: }

146: }

147:

148: int main(int argc, char ** argv) {

149: struct sigaction act;

150: sigset_t mask, sigio;

151: int i;

152:

153: /*
Блокировать SIGRTMIN. Мы не хотим получать его нигде,

154: кроме как внутри системного вызова sigsuspend. */

155: sigemptyset(&sigio);

156: sigaddset(&sigio, SIGRTMIN);

157: sigprocmask(SIG_BLOCK, &sigio, &mask);

158:

159: act.sa_sigaction = handler;

160: act.sa_flags = SA_SIGINFO;

161: sigemptyset(&act.sa_mask);

162: sigaction(SIGRTMIN, &act, NULL);

163:

164: if (!argv[1]) {

165: /* ни одного аргумента не передано, привести argc/argv

166: к виду ".", как будто передается единственный аргумент */

167: argv[1] = ".";

168: argc++;

169: }

170:

171: /* каждый аргумент представляет собой отслеживаемый каталог */

172: directoryList = malloc(sizeof(*directoryList) * argc);

173: directoryList[argc - 1].path = NULL;

174:

175: for (i = 0; i < (argc - 1); i++) {

176: directoryList[i].path = argv[i + 1];

177: if ((directoryList[i].fd =

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

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Мастер клинков. Начало пути

Распопов Дмитрий Викторович
1. Мастер клинков
Фантастика:
фэнтези
9.16
рейтинг книги
Мастер клинков. Начало пути

Имя нам Легион. Том 8

Дорничев Дмитрий
8. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 8

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон

Предатель. Цена ошибки

Кучер Ая
Измена
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Предатель. Цена ошибки

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Рождение победителя

Каменистый Артем
3. Девятый
Фантастика:
фэнтези
альтернативная история
9.07
рейтинг книги
Рождение победителя

Барону наплевать на правила

Ренгач Евгений
7. Закон сильного
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барону наплевать на правила

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь