SFUSE_Documentation
로딩중...
검색중...
일치하는것 없음
main.c
이 파일의 문서화 페이지로 가기
1// File: include/fs.h
8extern bool g_force_format;
9
10// File: src/main.c
18
19#include "fs.h"
20#include <errno.h>
21#include <fuse3/fuse.h>
22#include <stdbool.h>
23#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
26
32bool g_force_format = false;
33
39struct fuse_operations *sfuse_get_operations(void);
40
54int main(int argc, char *argv[]) {
55 int err = 0;
56 int idx = 1;
57
58 /* 옵션 처리: -F (강제 포맷) */
59 if (argc > 1 && strcmp(argv[1], "-F") == 0) {
60 g_force_format = true;
61 idx++;
62 }
63
64 /* 인수 체크: 블록 장치 경로, 마운트 포인트 필요 */
65 if (argc - idx < 2) {
66 fprintf(stderr, "Usage: %s [-F] <device> <mountpoint> [FUSE options]\n",
67 argv[0]);
68 return EXIT_FAILURE;
69 }
70
72 const char *device_path = argv[idx];
74 const char *mountpoint = argv[idx + 1];
75
76 /* SFUSE 초기화 */
77 struct sfuse_fs *fs = fs_initialize(device_path, &err);
78 if (!fs) {
79 if (err == EINVAL) {
80 fprintf(stderr,
81 "SFUSE: 해당 장치가 VSFS 형식이 아닙니다. "
82 "포맷하려면 -F 옵션을 사용하세요. (err=%d)\n",
83 err);
84 } else {
85 fprintf(stderr, "SFUSE: 파일시스템 초기화 실패 (err=%d)\n", err);
86 }
87 return EXIT_FAILURE;
88 }
89
90 /* 추가 FUSE 인자 계산 */
91 int remaining = argc - (idx + 2);
92 int fuse_argc = 2 + remaining;
93 char **fuse_argv = malloc(sizeof(char *) * fuse_argc);
94 if (!fuse_argv) {
95 perror("malloc");
96 fs_teardown(fs);
97 return EXIT_FAILURE;
98 }
99
100 int f = 0;
101 fuse_argv[f++] = strdup(argv[0]);
102 fuse_argv[f++] = strdup(mountpoint);
103 for (int i = 0; i < remaining; ++i) {
104 fuse_argv[f++] = strdup(argv[idx + 2 + i]);
105 }
106
108 struct fuse_args fuse_args = FUSE_ARGS_INIT(fuse_argc, fuse_argv);
109
110 /* FUSE 메인 루프 실행 */
111 int ret =
112 fuse_main(fuse_args.argc, fuse_args.argv, sfuse_get_operations(), fs);
113
114 /* 정리 작업: FS 해제 및 메모리 반환 */
115 fs_teardown(fs);
116 for (int i = 0; i < fuse_argc; ++i)
117 free(fuse_argv[i]);
118 free(fuse_argv);
119 fuse_opt_free_args(&fuse_args);
120
121 return ret;
122}
bool g_force_format
강제 포맷 옵션 플래그
Definition main.c:32
struct sfuse_fs * fs_initialize(const char *path, int *error_out)
파일 시스템 초기화
Definition fs.c:105
void fs_teardown(struct sfuse_fs *fs)
파일 시스템 정리
Definition fs.c:165
struct fuse_operations * sfuse_get_operations(void)
SFUSE용 FUSE operations 구조체 반환
Definition ops.c:232
int main(int argc, char *argv[])
프로그램 진입점
Definition main.c:54
struct fuse_operations * sfuse_get_operations(void)
SFUSE FUSE 연산 테이블을 반환
Definition ops.c:232
SFUSE 파일 시스템 컨텍스트 구조체
Definition fs.h:21