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

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.

Разработка приложений в среде Linux. Второе издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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;

367: job->text = malloc(count + 1);

368: strncpy(job->text, *commandPtr, count);

369: job->text[count] = '\0';

370: }

371:

372: *commandPtr = returnCommand;

373:

374: return 0;

375: }

376:

377: int setupRedirections(struct childProgram * prog) {

378: int i;

379: int openfd;

380: int mode;

381: struct redirectionSpecifier * redir = prog->redirections;

382:

383: for (i = 0; i < prog->numRedirections; i++, redir++) {

384: switch (redir->type) {

385: case REDIRECT_INPUT:

386: mode = O_RDONLY;

387: break;

388: case REDIRECT_OVERWRITE:

389: mode = O_RDWR | O_CREAT | O_TRUNC;

390: break;

391: case REDIRECT_APPEND:

392: mode = O_RDWR | O_CREAT | O_APPEND;

393: break;

394: }

395:

396: openfd = open(redir->filename, mode, 0666);

397: if (openfd < 0) {

398: /* мы могли потерять это в случае переадресации stderr,

399: хотя bash и ash тоже потеряют его (а вот

400: zsh - нет!) */

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

402: redir->filename, strerror(errno));

403: return 1;

404: }

405:

406: if (openfd != redir->fd) {

407: dup2(openfd, redir->fd);

408: close(openfd);

409: }

410: }

411:

412: return 0;

413: }

414:

415: int runCommand(struct job newJob, struct jobSet * jobList,

416: int inBg) {

417: struct job * job;

418: char * newdir, * buf;

419: int i, len;

420: int nextin, nextout;

421: int pipefds[2]; /* pipefd[0] предназначен для чтения */

422: char * statusString;

423: int jobNum;

424: int controlfds[2] ;/*канал для возможности приостановки работы дочернего процесса*/

425:

426: /* здесь производится обработка встраиваемых модулей — мы не используем fork(),

427: поэтому, чтобы поместить процесс в фон, придется потрудиться */

428: if (!strcmp(newJob.progs[0].argv[0], "exit")) {

429: /* здесь возвращается реальный код выхода */

430: exit(0);

431: } else if (!strcmp(newJob.progs[0].argv[0], "pwd")) {

432: len = 50;

433: buf = malloc(len);

434: while (!getcwd(buf, len) && errno == ERANGE) {

435: len += 50;

436: buf = realloc(buf, len);

437: }

438: printf("%s\n", buf);

439: free(buf);

440: return 0;

441: } else if (!strcmp(newJob.progs[0].argv[0], "cd")) {

442: if (!newJob.progs[0].argv[1] == 1)

443: newdir == getenv("HOME");

444: else

445: newdir = newJob.progs[0].argv[1];

446: if (chdir(newdir))

447: printf("сбой при смене текущего каталога: %s\n",

448: strerror(errno));

449: return 0;

450: } else if (!strcmp(newJob.progs[0].argv[0], "jobs")) {

451: for (job = jobList->head; job; job = job->next) {

452: if (job->runningProgs == job->stoppedProgs)

453: statusString = "Остановлено";

454: else

455: statusString = "Выполняется";

456:

457: printf(JOB_STATUS_FORMAT, job->jobId, statusString,

458: job->text);

459: }

460: return 0;

461: } else if (!strcmp(newJob.progs[0].argv[0], "fg") ||

462: !strcmp(newJob.progs[0].argv[0], "bg")) {

463: if (!newJob.progs[0].argv[1] || newJob.progs[0].argv[2]) {

464: fprintf(stderr,

465: "%s: ожидался в точности один аргумент\n",

466: newJob.progs[0].argv[0]);

467: return 1;

468: }

469:

470: if (sscanf(newJob.progs[0].argv[1], "%%%d", &jobNum) != 1) {

471: fprintf(stderr, "%s: неверный аргумент '%s'\n",

472: newJob.progs[0].argv[0],

473: newJob.progs[0].argv[1]);

474: return 1;

475: }

476:

477: for (job = jobList->head; job; job = job->next)

478: if (job->jobId == jobNum) break;

479:

480: if (!job) {

481: fprintf(stderr, "%s: неизвестное задание %d\n",

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

Обсуждение, отзывы о книге «Разработка приложений в среде Linux. Второе издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x