Программа на C: как получить номер инода родительского каталога? - PullRequest
5 голосов
/ 28 января 2010

Как получить номер инода каталога, скажем /home/laks/file.txt Мне нужен номер индекса в каталоге laks. Любая встроенная функция уже доступна? Я думаю, что я мог бы использовать stat (), если я вырезал имя файла ... но любое другое решение этого без удаления имени файла.

Ответы [ 2 ]

2 голосов
/ 28 января 2010
#include <libgen.h>
#include <sys/stat.h>
...
struct stat statbuf;
if (stat(dirname(argv[1]), &statbuf) != -1)
    process_inode_number(statbuf.st_ino);

Обратите внимание, что dirname() может изменить строку, поэтому, если она вам все еще нужна, или если это может быть строковый литерал (который находится в постоянной памяти), тогда используйте strdup(), чтобы сделать копию строки для dirname().

0 голосов
/ 28 января 2010
a=/home/laks/file.txt
dir=${a%/*}
set -- $(ls -ldi $dir)
echo $1

или если вы хотите восстановить каталог

find /path -type f -name "*.txt" -printf 'stat -c "%%n:%%i" "%h"\n' | sort -u |bash
...