Linux의 C 애플리케이션은 USB 디스크가 마운트되었는지 감지합니다.

Linux의 C 애플리케이션은 USB 디스크가 마운트되었는지 감지합니다.

C 응용프로그램에 USB 디스크가 마운트되어 있는지 확인하고 싶습니다. 스크립트에서는 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");
}

관련 정보