確認建立的虛擬檔案是否mount
阿新 • • 發佈:2018-11-30
通過loop_info中欄位去確認是否mount
/* Backwards compatibility version */ struct loop_info { int lo_number; /* ioctl r/o */ __kernel_old_dev_t lo_device; /* ioctl r/o */ unsigned long lo_inode; /* ioctl r/o */ __kernel_old_dev_t lo_rdevice; /* ioctl r/o */ int lo_offset; int lo_encrypt_type; int lo_encrypt_key_size; /* ioctl w/o */ int lo_flags; /* ioctl r/o */ char lo_name[LO_NAME_SIZE]; unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ unsigned long lo_init[2]; char reserved[4]; }; struct loop_info64 { __u64 lo_device; /* ioctl r/o */ __u64 lo_inode; /* ioctl r/o */ __u64 lo_rdevice; /* ioctl r/o */ __u64 lo_offset; __u64 lo_sizelimit;/* bytes, 0 == max available */ __u32 lo_number; /* ioctl r/o */ __u32 lo_encrypt_type; __u32 lo_encrypt_key_size; /* ioctl w/o */ __u32 lo_flags; /* ioctl r/o */ __u8 lo_file_name[LO_NAME_SIZE]; __u8 lo_crypt_name[LO_NAME_SIZE]; __u8 lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ __u64 lo_init[2]; };
#include <fcntl.h> #include <linux/loop.h> #include <sys/ioctl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <strings.h> #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \ } while (0) int main(int argc, char *argv[]) { int ret = -1; int fd = -1; int i = 0; long devnr; char loopname[4096]; char test_name[]="/home/user/test.img"; struct loop_info64 test = {0}; for(i=0 ; i < 8; i++) { sprintf(loopname, "/dev/loop%d", i); fd = open(loopname, O_RDONLY); if(fd == -1){ errExit("open: loopname"); } ret = ioctl(fd, LOOP_GET_STATUS64, &test); close(fd); if(ret != 0) { errExit("ret"); } if(strcmp(test.lo_file_name, test_name) == 0) { printf("lo_file_name:%s test_name:%s\n", test.lo_file_name, test_name); exit(EXIT_SUCCESS); } } exit(EXIT_SUCCESS); }