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

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

Жанры

Разработка приложений в среде 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 =

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

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Экономка тайного советника

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Экономка тайного советника

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Ты не мой BOY

Рам Янка
5. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты не мой BOY

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Лекарь для захватчика

Романова Елена
Фантастика:
попаданцы
историческое фэнтези
фэнтези
5.00
рейтинг книги
Лекарь для захватчика

Отверженный VI: Эльфийский Петербург

Опсокополос Алексис
6. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VI: Эльфийский Петербург

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Темный Лекарь 11

Токсик Саша
11. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 11