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

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

Жанры

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

Троан Эрик В.

Шрифт:

 93: rc = 1;

 94: }

 95:

 96: dpclose(dp);

 97:

 98: return rc;

 99: }

100:

101: /* найти имя и вывести номер телефона, с которым оно связано;

102: напрямую разобрать командную строку */

103: int queryRecord(int argc, char ** argv) {

104: DEPOT * dp;

105: int rc;

106: char * phone;

107:

108: /*
ожидается только один аргумент, имя для поиска */

109: if (argc != 1) usage;

110:

111: /* открыть базу данных для чтения */

112: if (!(dp = openDatabase(0))) return 1;

113:

114: phone = dpget(dp, argv[0], -1, 0, -1, NULL);

115: if (!phone) {

116: if (dpecode == DP_ENOITEM)

117: fprintf(stderr, "%s не существует\n", argv[0]);

118: else

119: fprintf(stderr, "ошибка чтения базы данных: %s\n"

120: dperrmsg(dpecode));

121:

122: rc = 1;

123: } else {

124: printf("%s %s\n", argv[0], (char *) phone);

125: rc = 0;

126: }

127:

128: dpclose(dp);

129:

130: return rc;

131: }

132:

133: /* удалить определенную запись; имя передается в качестве

134: аргумента командной строки */

135: int delRecord(int argc, char ** argv) {

136: DEPOT * dp;

137: int rc;

138:

139: /* ожидается только один аргумент */

140: if (argc != 1) usage;

141:

142: /* открыть базу данных для обновления */

143: if (!(dp = openDatabase(1))) return 1;

144:

145: if (!(rc = dpout(dp, argv[0], -1))) {

146: if (dpecode == DP_ENOITEM)

147: fprintf(stderr, "%s не существует\n", argv[0]);

148: else

149: fprintf(stderr, "ошибка удаления элемента: %s\n",

150: dperrmsg(dpecode));

151:

152: rc = 1;

153: }

154:

155: dpclose(dp);

156:

157: return rc;

158: }

159:

160: /*
вывести список всех записей, имеющихся в базе данных */

161: int listRecords(void) {

162: DEPOT * dp;

163: char * key, * value;

164:

165: /* открыть базу данных только для чтения */

166: if (!(dp = openDatabase(0))) return 1;

167:

168: dpiterinit(dp);

169:

170: /* итерация по всем записям */

171: while ((key = dpiternext(dp, NULL))) {

172: value = dpget(dp, key, -1, 0, -1, NULL);

173: printf("%s %s\n", key, value);

174: }

175:

176: dpclose(dp);

177:

178: return 0;

179: }

180:

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

182: if (argc == 1) usage;

183:

184: /* найти флаг режима и вызвать соответствующую функцию

185: с остальными аргументами */

186: if (!strcmp(argv[1], "-а"))

187: return addRecord(argc - 2, argv + 2);

188: else if (!strcmp(argv[1], "-q"))

189: return queryRecord(argc - 2, argv + 2);

190: else if (!strcmp(argv[1], "-d"))

191: return delRecord(argc - 2, argv + 2);

192: else if (!strcmp(argv[1], "-l")) {

193: if (argc != 2) usage;

194: return listRecords;

195: }

196:

197: usage; /* не обнаружено никаких параметров */

198: return 0; /* возврат */

199: }

Глава 26

Синтаксический анализ параметров командной строки

Многие Linux-программы позволяют задавать параметры командной строки. Эти параметры выполняют самые разнообразные функции, однако имеют практически одинаковую синтаксическую структуру. Короткие параметры состоят из символа

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

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

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

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

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

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки

Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Корнев Павел Николаевич
Фантастика:
фэнтези
героическая фантастика
5.50
рейтинг книги
Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Метатель

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

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Жизнь под чужим солнцем

Михалкова Елена Ивановна
Детективы:
прочие детективы
9.10
рейтинг книги
Жизнь под чужим солнцем

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец