#define _GNU_SOURCE #include #include #include #include # define SAME_INODE(Stat_buf_1, Stat_buf_2) \ ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \ && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev) int main (int argc, char **argv) { int fd; struct stat st1, st2; if (argc != 2) error (1, 0, "Usage: %s ", argv[0]); if ((fd = open (argv[1], O_RDONLY | O_NOFOLLOW, 0)) == -1) error (1, errno, "error when opening %s", argv[1]); if (fstat (fd, &st1) == -1) error (1, errno, "error when stating %s", argv[1]); if (lstat (argv[1], &st2) == -1) error (1, errno, "error when stating %s", argv[1]); printf ("devices: %d %d, %d %d\n", st1.st_dev, st2.st_dev); if (SAME_INODE(st1, st2)) printf ("same inode!\n"); else printf ("different inode!\n"); return 0; }