или этот файл == команда
нет... исклбючительно файл..
или этот файл == команда
нет... исклбючительно файл..
оО... т.е. получить сначала айнод самого файла... а потом, начиная с корня, обходить все директории и получить айноды всех файлов в директориях и сравнивать его с исходным айнодом?.. типа если совпал - значит нашлась директория...
омг...
ага. команда find именно так и делает.
причём без инодов. просто имя. инод нужен лишь для того, что-бы найти именно ЭТОТ файл. но вы его не получите командой stat. когда вы пишете stat file_name на самом деле путь известен - если имя начинается не со слеша, то это текущий путь. текущий путь каждой конкретной программе доступен в переменной $PWD. Может ваша задача - найти текущий путь?
оО... т.е. получить сначала айнод самого файла... а потом, начиная с корня, обходить все директории и получить айноды всех файлов в директориях и сравнивать его с исходным айнодом?.. типа если совпал - значит нашлась директория...
омг...
не сверху вниз, а снизу вверх, пока не упрешься в корень.
c-villain, что на входе должна получать функция? путь до файла, указатель?
не сверху вниз, а снизу вверх, пока не упрешься в корень.
если известно только имя, то сверху вниз, от корня к листам.
что на входе должна получать функция? путь до файла, указатель?
тут речь про ядро, а не про программу. в ядре это всё не работает. там нет понятия "пользователь". а текущий путь привязан к программе, а программа - к пользователю. а ещё сама программа может изменить свой текущий путь.
Может ваша задача - найти текущий путь?
в смысле текущую директорию? то нет... исключительно полный путь...
что на входе должна получать функция? путь до файла, указатель?
путь до файла... обычный формат: "\home\user\ и т.д. и т.п."
не сверху вниз, а снизу вверх, пока не упрешься в корень.
какие-то примеры кода есть?
а ещё сама программа может изменить свой текущий путь.
Вот именно.... в этом и проблема собственно возникла... или прога пишет полный путь, тогда все работает как надо.... но чаще всего она пишет просто название файла... вот тут и нужен как раз полный путь...
если известно только имя, то сверху вниз, от корня к листам.
какие-то ссылки на код имеются? заранее спасибо=)
тут речь про ядро, а не про программу. в ядре это всё не работает. там нет понятия "пользователь". а текущий путь привязан к программе, а программа - к пользователю. а ещё сама программа может изменить свой текущий путь.
хм для меня это темный лес) сервер,хакер,ядро-херня какая-то)
и каталога "две точки" тоже.. Так вы сможете рекурсивно распутать весь полный путь.
до корня, где как известно две точки равны одной. а вот спец-функции я не нашёл...
ну так вроде и получается снизу(от файла) вверх(к корню).
путь до файла... обычный формат: "\home\user\ и т.д. и т.п."
че-то я совсем запутался... Можно при передаче пути к файлу проверять его на соответствие относительному или полному пути(по наличию "/"), если относительный переделываем в абсолютный путем добавления текущего каталога к относительному пути. Можно еще этот путь отдать в realpath(), чтоб убрал всякие "../","./". Но это надо делать сразу при получении, а то как сказал drBatty, если смениться текущий каталог, то смысла высчитывать его после не будет.
Вообщем drBatty, наверно посоветовал единственный верный путь.
наверно посоветовал единственный верный путь.
угу... гугл тоже мне темную сторону силы не открыл...
а вот код бы желательно увидеть...
но чаще всего она пишет просто название файла... вот тут и нужен как раз полный путь...
1) если пути нет, то считается - текущий каталог.
2) функцией readdir от "." ищите там файл ".."
3) файл ".." каталог верхнего уровня. если это корень - всё.
4) если не корень, читаете его функцией readdir, узнаёте имя нижнего каталога по иноду, и узнаёте инод каталога "../.."
5) goto 3
пример как юзать функции http://linuxforum.ru/viewtopic.php?pid=152060#p152060
только я там "забыл" closedir.
ситуацию "путь есть, но кривой" - сами. там просто.
гугл тоже мне темную сторону силы не открыл...
есть там. мне лень искать или писать самому. и у меня есть. тоже лениво искать. самим не написать? я вам всё необходимое дал.
и набросок алгоритма http://linuxforum.ru/viewtopic.php?pid=152132#p152132
и даже примеры.