Как получить имя текущего рабочего каталога (текущей рабочей папки) вместо имени пути?

0

Я знаю, как получить имя пути CWD через функцию getcwd, и я использую функцию strtok для получения имени каталога (означает текущую рабочую папку), есть ли что-нибудь доступное для получения этой вещи через простой запрос или функцию?

  • 0
    getcwd дает путь к каталогу. Вы ищете realpath (3) ?
  • 0
    Используйте basename, как предложено в ответе ниже, чтобы получить только имя каталога (без пути), т.е. для /usr/bin/sort , basename вернет вам sort.
Теги:
path

3 ответа

4
Лучший ответ

Если getcwd() возвращает "/this/is/my/cwd" и вы хотите просто "cwd" вы можете использовать basename() для того, что было возвращено getcwd().

#include <unistd.h> /* for getcwd() */
#include <libgen.h> /* for basename() */

[...]

  char cwd[PATH_MAX] = "";
  char * cwd_base = NULL;

  if (NULL == getcwd(cwd, sizeof(cwd)))
  {
    perror("getcwd() failed");
  }
  else
  {
    cwd_base = basename(cwd);
  }

  if (NULL != cwd_base)
  {
    printf("The current working directory base name is '%s'.\n", cwd_base);
  }
3

Я бы использовал strrchr() используя разделитель каталога платформы, а не strtok().

Конечно, "текущая рабочая папка" обычно должна быть полным абсолютным путем, чтобы быть полезной для доступа к файловой системе.

0

Используйте все, что пригодится:

  • strtok
  • strrchr
  • или даже библиотеки регулярных выражений, например http://www.pcre.org/

В этом конкретном случае все они достаточно просты в использовании. И если вы используете так много, включите его в подпрограмму "помощник".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню