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");
}