📄 umount.c
字号:
#include <sys/mount.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <linux/loop.h>// FIXME - only one loop mount is supported at a time#define LOOP_DEVICE "/dev/block/loop0"static int is_loop_mount(const char* path){ FILE* f; int count; char device[256]; char mount_path[256]; char rest[256]; int result = 0; int path_length = strlen(path); f = fopen("/proc/mounts", "r"); if (!f) { fprintf(stdout, "could not open /proc/mounts\n"); return -1; } do { count = fscanf(f, "%255s %255s %255s\n", device, mount_path, rest); if (count == 3) { if (strcmp(LOOP_DEVICE, device) == 0 && strcmp(path, mount_path) == 0) { result = 1; break; } } } while (count == 3); fclose(f); return result;}int umount_main(int argc, char *argv[]){ int loop, loop_fd; if(argc != 2) { fprintf(stderr,"umount <path>\n"); return 1; } loop = is_loop_mount(argv[1]); if(umount(argv[1])){ fprintf(stderr,"failed.\n"); return 1; } if (loop) { // free the loop device loop_fd = open(LOOP_DEVICE, O_RDONLY); if (loop_fd < -1) { perror("open loop device failed"); return 1; } if (ioctl(loop_fd, LOOP_CLR_FD, 0) < 0) { perror("ioctl LOOP_CLR_FD failed"); return 1; } close(loop_fd); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -