Узнать полный путь к файлу

Узнать полный путь к файлу

20.06.2019 06:23:22 Просмотров 17 Источник

Пытаюсь написать свою реализацию ls, и столкнулся с такой проблемой: если я открываю папку, в которой лежит исполняемый файл, все работает хороошо, но ровно до того момента, пока я не открываю любую другую папку. Имя файлов считывается хорошо, но вот права доступа, к-ство ссылок, размер и дата модификации остаются идентичными(все для флага -l). Мне подсказали, что нужно модифицировать аргумент, добавив туда остальной путь от корневой папки, но это не работает, когда задаю вручную. Что нужно сделать, чтобы адекватно отобразить?

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83#comment1680795_994857
сначала исходник, потом стулья...
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83#comment1681031_994857
В списке «разрешённых» функций отсутствуют необходимые для корректной работы программы, передайте «привет» преподавателю!
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83#comment1683014_994857
@0andriy как раз все, что нужно, тут указано. и что же по вашему мнению тут не хватает?

Ответы - Узнать полный путь к файлу / Узнать полный путь к файлу

Является ответом!
AlexGlebe

20.06.2019 09:14:32

lstat(myfile->d_name, &mystat);

Полный путь задать :

char * fullname = malloc(strlen(dir_name)+strlen(myfile->d_name)+2);
strcpy(fullname,dir_name);
strcpy(fullname+strlen(dir_name),"/");
strcpy(fullname+strlen(dir_name)+1,myfile->d_name);
lstat(fullname, &mystat);
free(fullname);
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83/994912#comment1681009_994912
Если путь длиннее MAX_PATH, то это скорее всего не заработает.
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83/994912#comment1681021_994912
@0andriy linux/limits.h. : #define PATH_MAX 4096 . Да, вы правы.
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83/994912#comment1681025_994912
Не понимаю, что вы хотели этим сказать. Да, почитайте ещё про strcat(), хотя лучше про asprintf().
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83/994912#comment1681027_994912
@0andriy Дело вкуса. Есть варианты : memcpy , strcpy , strcat. Мне нравиться memcpy , так как известны все длины строк.
https://ru.stackoverflow.com/questions/994857/%d0%a3%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%bf%d0%be%d0%bb%d0%bd%d1%8b%d0%b9-%d0%bf%d1%83%d1%82%d1%8c-%d0%ba-%d1%84%d0%b0%d0%b9%d0%bb%d1%83/994912#comment1681028_994912
Почитайте всё же про asprintf().
Закрыть X