我使用stat()
. 对于任何可能在搜索中找到它的人,它位于一个函数中:
int getmntpt(char *path, char *mount_point) {
struct stat cur_stat;
struct stat last_stat;
char dir_name[PATH_MAX];
char *dirname_p = dir_name;
char cur_cwd[255];
char *cur_cwd_p = cur_cwd;
char saved_cwd[PATH_MAX];
if (getcwd(saved_cwd, PATH_MAX) == NULL) {
errno = EIO;
return ERROR;
}
if (lstat(path, &cur_stat) < 0) {
errno = EIO;
return ERROR;
}
if (S_ISDIR (cur_stat.st_mode)) {
last_stat = cur_stat;
if (chdir("..") < 0)
return ERROR;
if (getcwd(cur_cwd_p, 255) == NULL) {
errno = EIO;
return ERROR;
}
} else { /* path is a file */
size_t path_len, suffix_len, dir_len;
path_len = strlen(path);
suffix_len = strlen(strrchr(path, 47)); /* 47 = '/' */
dir_len = path_len - suffix_len;
dirname_p = strncpy(dirname_p, path, dir_len);
if (chdir(dirname_p) < 0)
return ERROR;
if (lstat(".", &last_stat) < 0)
return ERROR;
}
for (;;) {
if (lstat("..", &cur_stat) < 0)
return ERROR;
if (cur_stat.st_dev != last_stat.st_dev || cur_stat.st_ino == last_stat.st_ino)
break; /* this is the mount point */
if (chdir("..") < 0)
return ERROR;
last_stat = cur_stat;
}
if (getcwd(mount_point, PATH_MAX) == NULL)
return ERROR;
if (chdir(saved_cwd) < 0)
return ERROR;
return SUCCESS;
}