我想检查USB磁盘是否安装在C应用程序中。我知道在脚本中我可以通过 mount | 完成此操作grep /mnt (udev 挂载 USB 驱动器的挂载点),但我需要在 C 应用程序中执行此操作。早些时候,我曾经使用 system("sh script.sh") 来完成此操作,但这样做会导致一些严重的问题,因为此代码在非常关键的线程中运行。
答案1
如果您需要检查挂载点的完整列表,请使用getmntent(3)
或其线程安全的 GNU 扩展getmntent_r(3)
。
如果您只想快速检查给定目录是否安装了文件系统,请使用该stat(2)
系列中的函数之一。例如,如果您想检查是否/mnt
已安装文件系统,您可以执行以下操作:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
struct stat mountpoint;
struct stat parent;
/* Get the stat structure of the directory...*/
if stat("/mnt", &mountpoint) == -1) {
perror("failed to stat mountpoint:");
exit(EXIT_FAILURE);
}
/* ... and its parent. */
if stat("/mnt/..", &parent) == -1) {
perror("failed to stat parent:");
exit(EXIT_FAILURE);
}
/* Compare the st_dev fields in the results: if they are
equal, then both the directory and its parent belong
to the same filesystem, and so the directory is not
currently a mount point.
*/
if (mountpoint.st_dev == parent.st_dev) {
printf("No, there is nothing mounted in that directory.\n");
} else {
printf("Yes, there is currently a filesystem mounted.\n");
}