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

We use cookies. Read the Privacy and Cookie Policy

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("%s ", 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("сбой при смене текущего каталога: %s ",

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: }