Linux中C应用程序检测USB盘是否挂载

Linux中C应用程序检测USB盘是否挂载

我想检查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");
}

相关内容