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

 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 =

178:    open(directoryList[i].path, O_RDONLY)) < 0) {

179:    fprintf(stderr, "ошибка при открытии %s: %s\n",

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных