这就是我想出的。原来,通常不需要遍历父目录。您所要做的就是获取文件的设备号,然后找到具有相同设备号的相应安装条目。
struct mntent *mountpoint(char *filename, struct mntent *mnt, char *buf, size_t buflen){ struct stat s; FILE * fp; dev_t dev; if (stat(filename, &s) != 0) { return NULL; } dev = s.st_dev; if ((fp = setmntent("/proc/mounts", "r")) == NULL) { return NULL; } while (getmntent_r(fp, mnt, buf, buflen)) { if (stat(mnt->mnt_dir, &s) != 0) { continue; } if (s.st_dev == dev) { endmntent(fp); return mnt; } } endmntent(fp); // Should never reach here. errno = EINVAL; return NULL;}感谢@RichardPennington率先提出
realpath()并比较设备编号而不是inode编号。



