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

14.6.1. Добавление встроенных команд cd и pwd

14.6.1. Добавление встроенных команд cd и pwd

Добавление встроенных команд является прямым применением вызовов chdir() и getcwd(). Код соответствует runProgram() как раз там, где обрабатываются другие встроенные команды. Ниже показан раздел обработки встроенных команд в ladsh3.с.

422: if (!strcmp(newJob.progs[0].argv[0], "exit")) {
423:  /* здесь должен возвращаться реальный код завершения */
424:  exit(0);
425: } else if (!strcmp(newJob.progs[0].argv[0], "pwd")) {
426:  len = 50;
427:  buf = malloc(len);
428:  while (!getcwd(buf, len) && errno == ERANGE) {
429:   len += 50;
430:   buf = realloc(buf, len);
431:  }
432:  printf("%sn", buf);
433:  free(buf);
434:  return 0;
435: } else if (!strcmp(newJob.progs[0].argv[0], "cd")) {
436:  if (!new Job.progs[0].argv[1] == 1)
437:   newdir = getenv("HOME");
438:  else
439:   newdir = newJob.progs[0].argv[1];
440:  if (chdir(newdir))
441:   printf("сбой при смене текущего каталога: %sn",
442:  strerror(errno));
443:  return 0;
444: } else if (!strcmp(newJob.progs[0].argv[0], "jobs")) {
445:  for (job = jobList->head; job; job = job->next)
446:   printf(JOB_STATUS_FORMAT, job->jobId, "Выполняется",
447:    job -> text);
448:  return 0;
449: }

Оглавление книги


Генерация: 1.188. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз