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

на главную

Жанры

Разработка приложений в среде 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, состоят из пары символов
– -
, за которыми следует строка, состоящая из букв, цифр и дефисов. После любого из этих параметров может стоять аргумент. Пробел отделяет короткий параметр от его аргументов, а пробел или знак равенства отделяют длинный параметр от аргумента.

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

Восход. Солнцев. Книга XI

Скабер Артемий
11. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга XI

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

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Темный Охотник

Розальев Андрей
1. КО: Темный охотник
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник

Гром над Тверью

Машуков Тимур
1. Гром над миром
Фантастика:
боевая фантастика
5.89
рейтинг книги
Гром над Тверью

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Безродный

Коган Мстислав Константинович
1. Игра не для слабых
Фантастика:
боевая фантастика
альтернативная история
6.67
рейтинг книги
Безродный

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Счастливый торт Шарлотты

Гринерс Эва
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Счастливый торт Шарлотты

На три фронта

Бредвик Алекс
3. Иной
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
На три фронта

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

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

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

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

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

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

"Фантастика 2023-123". Компиляция. Книги 1-25

Харников Александр Петрович
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Фантастика 2023-123. Компиляция. Книги 1-25