tags:

views:

494

answers:

2

How to get directory inode number say /home/laks/file.txt I need the inode number of laks directory. Any built-in function is already available? I think i could use stat() if i cut the file name...but any other solution to this without removing file name.

A: 
a=/home/laks/file.txt
dir=${a%/*}
set -- $(ls -ldi $dir)
echo $1

or if you want to recurse directory

find /path -type f -name "*.txt" -printf 'stat -c "%%n:%%i" "%h"\n' | sort -u |bash
ghostdog74
thanks for your answer. Is it possible to do the same using C API ?
lakshmipathi
sorry, missed out the programming language. Hope somebody can answer you soon.
ghostdog74
Not your fault. I edited title only after your replied. So it's my mistake :)
lakshmipathi
A: 
#include <libgen.h>
#include <sys/stat.h>
...
struct stat statbuf;
if (stat(dirname(argv[1]), &statbuf) != -1)
    process_inode_number(statbuf.st_ino);

Note that dirname() may modify the string, so if you still need it, or if it may be a string literal (which is in read-only memory), then use strdup() to make a copy of the string for dirname().

mark4o
thanks I tried to run this way #include <libgen.h>#include <sys/stat.h>main(){struct stat statbuf;if (stat(dirname("/home/laks/file.txt"), }But it core dumps -- any thoughts
lakshmipathi
If you are using a string literal then use strdup. i.e. `strdup("/home/laks/file.txt")`
mark4o