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

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

Жанры

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

Троан Эрик В.

Шрифт:

253: prog->redirections[i].fd = 1;

254: else

255: prog->redirections[i].fd = 0;

256: }

257:

258: if (*src++ == '>') {

259: if (*src == '>') {

260: prog->redirections[i].type = REDIRECT_APPEND;

261: src++;

262: } else {

263: prog->redirections[i].type = REDIRECT_OVERWRIТЕ;

264: }

265: } else {

266: prog->redirections[i].type = REDIRECT_INPUT;

267: }

268:

269: /*
Это не соответствует стандарту sh POSIX. Ну и ладно. */

270: chptr = src;

271: while (isspace(*chptr)) chptr++;

272:

273: if (!*chptr) {

274: fprintf(stderr, "после %c ожидалось имя файла\n",

275: *src);

276: freeJob(job);

277: return 1;

278: }

279:

280: prog->redirections[i].filename = buf;

281: while (*chptr && !isspace(*chptr))

282: *buf++ = *chptr++;

283:

284: src = chptr - 1; /* src++ будет сделано позже */

285: prog->argv[argc] = ++buf;

286: break;

287:

288: case '|': /* канал */

289: /* завершение этой команды */

290: if (*prog->argv[argc]) argc++;

291: if (large) {

292: fprintf(stderr, "пустая команда в канале\n");

293: freeJob(job);

294: return 1;

295: }

296: prog->argv[argc] = NULL;

297:

298: /* и начало следующей */

299: job->numProgs++;

300: job->progs = realloc(job->progs,

301: sizeof (*job->progs) *

302: job->numProgs);

303: prog = job->progs + (job->numProgs - 1);

304: prog->numRedirections = 0;

305: prog->redirections = NULL;

306: prog->freeGlob = 0;

307: argc = 0;

308:

309: argvAlloced = 5;

310: prog->argv = malloc(sizeof(*prog->argv) *

311: argvAlloced);

312: prog->argv[0] = ++buf;

313:

314: src++;

315: while (*src && isspace(*src)) src++;

316:

317: if (!*src) {

318: fprintf(stderr, "пустая
команда в канале\n");

319: return 1;

320: }

321: src--; /* инкремент ++ мы сделаем в конце цикла */

322:

323: break;

324:

325: case '&': /* фон */

326: *isBg = 1;

327: case ';': /* разнообразные команды */

328: done = 1;

329: returnCommand = *commandPtr + (src - * commandPtr) + 1;

330: break;

331:

332: case '\\':

333: src++;

334: if (!*src) {

335: freeJob(job);

336: fprintf(stderr, "после \\ ожидался символ\n");

337: return 1;

338: }

339: if (*src == '*' | | *src == '[' || *src == '] '

340: || *src == '?')

341: *buf++ = '\\';

342: /* неудача */

343: default:

344: *buf++ = *src;

345: }

346:

347: src++;

348: }

349:

350: if (*prog->argv[argc]) {

351: argc++;

352: globLastArgument(prog, &argc, &argvAlloced);

353: }

354: if (!argc) {

355: freeJob(job);

356: return 0;

357: }

358: prog->argv[argc] = NULL;

359:

360: if (!returnCommand) {

361: job->text = malloc(strlen(*commandPtr) + 1);

362: strcpy(job->text, *commandPtr);

363: } else {

364: /*Оставляем любые хвостовые пробелы, хотя и получится это несколько небрежно*/

365:

366: count = returnCommand - *commandPtr;

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

Последний Паладин

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

Идущий в тени 8

Амврелий Марк
8. Идущий в тени
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Идущий в тени 8

Все еще не Герой!. Том 2

Довыдовский Кирилл Сергеевич
2. Путешествие Героя
Фантастика:
боевая фантастика
юмористическое фэнтези
городское фэнтези
рпг
5.00
рейтинг книги
Все еще не Герой!. Том 2

Совпадений нет

Безрукова Елена
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Совпадений нет

Муж на сдачу

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

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

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Довлатов. Сонный лекарь

Голд Джон
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь

СД. Восемнадцатый том. Часть 1

Клеванский Кирилл Сергеевич
31. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.93
рейтинг книги
СД. Восемнадцатый том. Часть 1

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

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

Назад в СССР: 1985 Книга 3

Гаусс Максим
3. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
5.50
рейтинг книги
Назад в СССР: 1985 Книга 3

Целитель. Книга вторая

Первухин Андрей Евгеньевич
2. Целитель
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Целитель. Книга вторая

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

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

Огненный князь 3

Машуков Тимур
3. Багряный восход
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Огненный князь 3

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ