SFUSE_Documentation
|
#include "fs.h"
#include "bitmap.h"
#include "block.h"
#include "dir.h"
#include "inode.h"
#include "super.h"
#include <errno.h>
#include <fuse3/fuse.h>
#include <linux/fs.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <time.h>
#include <unistd.h>
함수 | |
static int | fs_format_filesystem (int fd, struct sfuse_superblock *sb) |
빈 이미지 파일을 VSFS 구조로 포맷 | |
struct sfuse_fs * | fs_initialize (const char *path, int *error_out) |
SFUSE FS 초기화 | |
void | fs_teardown (struct sfuse_fs *fs) |
파일 시스템 해제 | |
int | fs_resolve_path (struct sfuse_fs *fs, const char *path, uint32_t *out_ino) |
경로 문자열을 inode 번호로 변환 | |
int | fs_getattr (struct sfuse_fs *fs, const char *path, struct stat *stbuf) |
파일 또는 디렉터리 속성 가져오기 (stat) | |
int | fs_readdir (struct sfuse_fs *fs, const char *path, void *buf, fuse_fill_dir_t filler, off_t offset) |
디렉터리 목록 가져오기 | |
int | fs_open (struct sfuse_fs *fs, const char *path, struct fuse_file_info *fi) |
파일 열기 (존재 여부만 확인) | |
int | fs_read (struct sfuse_fs *fs, const char *path, char *buf, size_t size, off_t offset) |
파일 읽기 | |
int | fs_write (struct sfuse_fs *fs, const char *path, const char *buf, size_t size, off_t offset) |
파일 쓰기 | |
int | fs_create (struct sfuse_fs *fs, const char *path, mode_t mode, struct fuse_file_info *fi) |
새 파일 생성 | |
int | fs_mkdir (struct sfuse_fs *fs, const char *path, mode_t mode) |
새 디렉터리 생성 | |
int | fs_unlink (struct sfuse_fs *fs, const char *path) |
파일 삭제 | |
int | fs_rmdir (struct sfuse_fs *fs, const char *path) |
비어 있는 디렉터리 삭제 | |
int | fs_rename (struct sfuse_fs *fs, const char *from, const char *to) |
파일 또는 디렉터리 이름 변경 (이동) | |
int | fs_truncate (struct sfuse_fs *fs, const char *path, off_t size) |
파일 크기 조정 | |
int | fs_fsync (struct sfuse_fs *fs, const char *path, int datasync, struct fuse_file_info *fi) |
파일 시스템 동기화 (flush/fsync) | |
int | fs_flush (struct sfuse_fs *fs, const char *path, struct fuse_file_info *fi) |
FUSE의 flush 호출 처리 | |
int | fs_utimens (struct sfuse_fs *fs, const char *path, const struct timespec tv[2]) |
파일 접근/수정 시간 업데이트 | |
int | fs_access (struct sfuse_fs *fs, const char *path, int mask) |
파일 접근 권한 검사 |
변수 | |
bool | g_force_format |
전역: 포맷 강제 여부 (-F 옵션) |
int fs_access | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
int | mask ) |
파일 접근 권한 검사
접근 권한 검사
fs | 파일 시스템 컨텍스트 포인터 |
path | 검사할 경로 (null-terminated 문자열) |
mask | 접근 마스크 (R_OK, W_OK, X_OK) |
fs.c 파일의 1343 번째 라인에서 정의되었습니다.
int fs_create | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
mode_t | mode, | ||
struct fuse_file_info * | fi ) |
새 파일 생성
파일 생성
지정된 경로에 새 파일을 생성하고 상위 디렉터리에 디렉터리 엔트리를 추가한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 생성할 파일 경로 (null-terminated 문자열) |
mode | 파일 모드 및 권한 (하위 12비트 사용) |
fi | FUSE 파일 정보 구조체 (사용되지 않음) |
< 일반 파일로 설정
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
int fs_flush | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
struct fuse_file_info * | fi ) |
|
static |
빈 이미지 파일을 VSFS 구조로 포맷
디스크 이미지 파일을 초기화하여 슈퍼블록, 비트맵, 루트 아이노드를 설정하고 기록한다.
fd | 디스크 이미지 파일 디스크립터 |
sb | 초기화된 슈퍼블록 정보를 저장할 구조체 포인터 |
int fs_fsync | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
int | datasync, | ||
struct fuse_file_info * | fi ) |
파일 시스템 동기화 (flush/fsync)
FUSE에서 fsync 요청 처리
fs | 파일 시스템 컨텍스트 포인터 |
path | 대상 경로 (사용되지 않음) |
datasync | 데이터만 동기화할지 여부 |
fi | FUSE 파일 정보 구조체 (사용되지 않음) |
fs.c 파일의 1280 번째 라인에서 정의되었습니다.
int fs_getattr | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
struct stat * | stbuf ) |
파일 또는 디렉터리 속성 가져오기 (stat)
파일/디렉터리 속성 조회
지정 경로의 inode를 조회하여 stat 구조체에 채움
fs | 파일 시스템 컨텍스트 포인터 |
path | 대상 경로 문자열 |
stbuf | 속성 정보를 채울 stat 구조체 포인터 |
struct sfuse_fs * fs_initialize | ( | const char * | path, |
int * | error_out ) |
SFUSE FS 초기화
파일 시스템 초기화
int fs_mkdir | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
mode_t | mode ) |
새 디렉터리 생성
디렉터리 생성
지정된 경로에 새 디렉터리를 생성하고 상위 디렉터리에 디렉터리 엔트리를 추가한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 생성할 디렉터리 경로 (null-terminated 문자열) |
mode | 디렉터리 모드 및 권한 (하위 12비트 사용) |
< 디렉터리 타입 설정
< 첫 엔트리에 새 inode 설정
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 디렉터리 크기 갱신
< 빈 슬롯에 inode 설정
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 수정 시간 갱신
< 변경 시간 갱신
int fs_open | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
struct fuse_file_info * | fi ) |
파일 열기 (존재 여부만 확인)
파일 열기
path가 유효한 파일인지 확인
fs | 파일 시스템 컨텍스트 포인터 |
path | 열고자 하는 파일 경로 문자열 |
fi | FUSE 파일 정보 구조체 (사용하지 않음) |
int fs_read | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
char * | buf, | ||
size_t | size, | ||
off_t | offset ) |
파일 읽기
지정된 경로의 파일 데이터를 읽어 사용자 버퍼에 복사한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 읽을 파일 경로 (null-terminated 문자열) |
buf | 데이터를 저장할 사용자 버퍼 포인터 |
size | 요청한 읽기 크기 (바이트 단위) |
offset | 파일 내 시작 오프셋 (바이트 단위) |
< 논리 블록 인덱스
< 블록 내 오프셋
< 이터레이션당 최대 읽기 바이트
int fs_readdir | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
void * | buf, | ||
fuse_fill_dir_t | filler, | ||
off_t | offset ) |
디렉터리 목록 가져오기
디렉터리 내용 읽기
지정 경로의 디렉터리 엔트리를 FUSE callback에 전달
fs | 파일 시스템 컨텍스트 포인터 |
path | 디렉터리 경로 문자열 |
buf | FUSE가 제공하는 버퍼 포인터 |
filler | FUSE 디렉터리 엔트리 추가 콜백 |
offset | 읽기 시작 오프셋 (사용되지 않음) |
int fs_rename | ( | struct sfuse_fs * | fs, |
const char * | from, | ||
const char * | to ) |
파일 또는 디렉터리 이름 변경 (이동)
파일 또는 디렉터리 이름 변경
지정된 경로의 엔트리를 원본 디렉터리에서 제거하고, 대상 디렉터리에 새 엔트리를 추가한다.
fs | 파일 시스템 컨텍스트 포인터 |
from | 원본 경로 (null-terminated 문자열) |
to | 대상 경로 (null-terminated 문자열) |
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
< 파일/디렉터리 이름의 최대 길이
fs.c 파일의 1011 번째 라인에서 정의되었습니다.
int fs_resolve_path | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
uint32_t * | out_ino ) |
경로 문자열을 inode 번호로 변환
경로를 inode 번호로 변환
루트("/")는 inode 1로 처리하며, 경로를 '/' 구분자로 분할하여 순차 검색
fs | 파일 시스템 컨텍스트 포인터 |
path | 변환할 경로 문자열 (null-terminated) |
out_ino | 변환된 inode 번호를 저장할 포인터 |
int fs_rmdir | ( | struct sfuse_fs * | fs, |
const char * | path ) |
비어 있는 디렉터리 삭제
디렉터리 삭제
지정된 경로의 디렉터리가 비어 있는지 확인한 후, fs_unlink 로직을 재사용하여 디렉터리를 제거한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 삭제할 디렉터리 경로 (null-terminated 문자열) |
void fs_teardown | ( | struct sfuse_fs * | fs | ) |
파일 시스템 해제
파일 시스템 정리
슈퍼블록과 비트맵을 디스크에 동기화하고, 할당된 메모리 및 파일 디스크립터 정리
fs | 해제할 파일 시스템 컨텍스트 포인터 |
int fs_truncate | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
off_t | size ) |
파일 크기 조정
파일 크기 조정 (truncate)
지정된 경로의 파일 크기를 주어진 크기로 변경. 크기 축소 시 불필요한 데이터 블록을 해제하고, 크기 확장 시 필요한 경우 단일 바이트 쓰기를 통해 공간을 확보.
fs | 파일 시스템 컨텍스트 포인터 |
path | 대상 파일 경로 (null-terminated 문자열) |
size | 새 파일 크기 (바이트 단위) |
< 유지할 블록 수
< 기존 블록 수
< 1차 인덱스
< 2차 인덱스
< 파일 크기 갱신
< 수정 시간 갱신
< 변경 시간 갱신
fs.c 파일의 1138 번째 라인에서 정의되었습니다.
int fs_unlink | ( | struct sfuse_fs * | fs, |
const char * | path ) |
파일 삭제
지정된 경로의 파일을 삭제하고, 관련 데이터 블록 및 아이노드를 해제한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 삭제할 파일 경로 (null-terminated 문자열) |
< 파일/디렉터리 이름의 최대 길이
int fs_utimens | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
const struct timespec | tv[2] ) |
파일 접근/수정 시간 업데이트
파일의 시간 속성 변경 (utimens)
fs | 파일 시스템 컨텍스트 포인터 |
path | 대상 경로 (null-terminated 문자열) |
tv | tv[0]=접근 시간, tv[1]=수정 시간 |
< 접근 시간 설정
< 수정 시간 설정
< 메타데이터 변경 시간 갱신
fs.c 파일의 1318 번째 라인에서 정의되었습니다.
int fs_write | ( | struct sfuse_fs * | fs, |
const char * | path, | ||
const char * | buf, | ||
size_t | size, | ||
off_t | offset ) |
파일 쓰기
지정된 경로의 파일에 사용자 버퍼의 데이터를 기록한다.
fs | 파일 시스템 컨텍스트 포인터 |
path | 쓰기 대상 파일 경로 (null-terminated 문자열) |
buf | 기록할 데이터가 담긴 버퍼 포인터 |
size | 기록할 바이트 수 |
offset | 파일 내 시작 오프셋 (바이트 단위) |
< 현재 오프셋
< 논리 블록 인덱스
< 블록 내 오프셋
< 블록 경계까지 쓸 바이트
< 대상 블록 포인터 위치
< 실제 할당된 디스크 블록 번호
< 1차 인덱스
< 2차 인덱스
< 수정 시간 갱신
< 변경 시간 갱신