LINUX.ORG.RU

#include <unistd.h>
#include <stdio.h>
#include <errno.h>

int main() {
   char cwd[1024];
   if (getcwd(cwd, sizeof(cwd)) != NULL)
       fprintf(stdout, "Current working dir: %s\n", cwd);
   else
       perror("getcwd() error");
   return 0;
}
int13h ★★★★★
()

как в Си вывести название текущей папки

А почему не мамки?

anonymous
()

название текущей папки

Текущий папка — это что-то новое. Раньше только мамки текли.

anonymous
()
Ответ на: комментарий от int13h
if (getcwd(cwd, sizeof(cwd)) != NULL)
    fprintf(stdout, "Current working dir: %s\n", cwd);
else
    perror("getcwd() error");

Садись, два.

invy ★★★★★
()
Ответ на: комментарий от int13h
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>

int main()
{
    unsigned int allocSize = 256;
    char *cwd = malloc(allocSize);
    while(getcwd(cwd, allocSize) == NULL)
    {
        int err = errno;
        if(err != ERANGE)
        {
            return err;
        }
        allocSize = (float)allocSize * 1.5f;
        cwd = realloc(cwd, allocSize);
        if(cwd == NULL)
        {
            return -1;
        }
    }
    fprintf(stdout, "Current working dir: %s, size = %d\n", cwd, allocSize);
    return 0;
}
invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 3)
Ответ на: комментарий от anonymous

Что limits.h? В разных файловых системах максимальная длина пути разная. Ты монтируешь в /media/ какую-то файловую систему, где длина пути не ограничена и твоя программа не работает.

invy ★★★★★
()
Ответ на: комментарий от invy

Ты это чё, намекаешь что стандарты не нужны, потому что вася-говнокодер может им не следовать или что?

anonymous
()
Ответ на: комментарий от anonymous

Я прямо говорю, что PATH_MAX не нужна и вредна в данном случае и не надо ее советовать, потому что getcwd может вернуть путь произвольной длины.

Какие стандарты распространяются на примонтированые файловые системы, которые могут быть совершенно произвольными?

https://en.wikipedia.org/wiki/Comparison_of_file_systems

Пункт Limits, колонка maximum pathname length.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от invy

А ещё при создании файлов нужно учитывать, что на примонтированной файловой системе могут быть ограничения сверху на длину имени файла.

Поэтому предлагаю ограничить длиной 6.3 и не использовать директорий: вдруг подмонтированная ФС не поддерживает иерархию.

anonymous
()
Ответ на: комментарий от anonymous

Вот пусть подмонтированая система и возвращает ошибку - это ее прямая обязанность проверять валидность пути. А твоей программе должно быть фиолетово, какая длина пути и файла.

linux/limits.h:#define PATH_MAX        4096	/* # chars in a path name including nul */
igor:...0123456789abcdef0123456789abcdef0123456789abcdef/0123456789abcdef0123456789abcdef0123456789abcdef/0123456789abcdef0123456789abcdef0123456789abcdef% pwd | wc
      1       1    4393
invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от invy

Я про то, что нам, пользователям, нужно самоограничиться! А то вдруг придёт сосед с кассетой с ФС DECTape, а мы ему фильм не можем скопировать, т.к. у файла имя длиннее 6 символов.

anonymous
()
Ответ на: комментарий от invy

unsigned int allocSize

А если длина пути будет больше 2³²?

anonymous
()
Ответ на: комментарий от invy

А если длинна пути окажется больше свободной озу в системе?

anonymous
()
int main() {
    return main();
}

Попробуй, реально работает!

reprimand ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.