Files
markbase/docs/FSKIT_QUICK_REFERENCE.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

210 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FSKit API Quick Reference ⭐⭐⭐⭐⭐
## 修正后的 API基于 FSKitSample
### 1. Entry Point
```swift
struct MyFSExtension: FSKitExtension {
func filesystem() -> FSFileSystem {
return MyFS()
}
}
```
### 2. Filesystem
```swift
class MyFS: FSFileSystem {
func probeResource(
resource: FSResource,
replyHandler: @escaping (FSProbeResult?) -> Void
) {
// Check if resource is usable
let result = FSProbeResult.usable(
resource: resource,
identifier: FSResourceIdentifier(uuid: UUID()),
userInfo: nil
)
replyHandler(result)
}
func loadResource(
resource: FSResource,
options: FSTaskOptions,
replyHandler: @escaping (Error?) -> Void
) {
// Load resource (block device, etc)
replyHandler(nil)
}
func unloadResource(
resource: FSResource,
options: FSTaskOptions,
replyHandler: @escaping (Error?) -> Void
) {
// Unload resource
replyHandler(nil)
}
}
```
### 3. Volume
```swift
class MyFSVolume: FSVolume {
init(resource: FSResource) {
super.init(resource: resource)
}
}
// Required protocols (13+):
extension MyFSVolume: FSVolume.PathConfOperations { }
extension MyFSVolume: FSVolume.OpenCloseOperations { }
extension MyFSVolume: FSVolume.IOOperations { }
extension MyFSVolume: FSVolume.DirectoryOperations { }
extension MyFSVolume: FSVolume.AttributeOperations { }
extension MyFSVolume: FSVolume.XattrOperations { }
```
### 4. File Item
```swift
class MyFSItem: FSItem {
var name: FSFileName
var id: UInt64
var attributes: FSItem.Attributes
var xattrs: [String: Data]
var children: [MyFSItem]
var content: Data?
init(name: FSFileName) {
self.name = name
self.id = UInt64.random()
self.attributes = FSItem.Attributes()
super.init()
}
}
```
### 5. Key Protocol Methods
**PathConfOperations**
```swift
func pathconf(_ item: FSItem, conf: FSPathConf) throws -> Int32
```
**OpenCloseOperations**
```swift
func open(_ item: FSItem, options: FSTaskOptions) throws -> FSFileHandle
func close(_ handle: FSFileHandle) throws
```
**IOOperations**
```swift
func read(_ handle: FSFileHandle, buffer: UnsafeMutableRawBufferPointer, options: FSTaskOptions) throws -> Int
func write(_ handle: FSFileHandle, buffer: UnsafeRawBufferPointer, options: FSTaskOptions) throws -> Int
```
**DirectoryOperations**
```swift
func enumerateDirectory(_ item: FSItem, verifier: inout FSItemVerifier, options: FSTaskOptions) throws -> FSItemEnumerator
```
**AttributeOperations**
```swift
func attributes(_ item: FSItem) throws -> FSItem.Attributes
func attributes(_ item: FSItem, named: FSFileName) throws -> FSItem.Attributes
func setAttributes(_ item: FSItem, attributes: FSItem.Attributes, options: FSTaskOptions) throws
```
**XattrOperations**
```swift
func getXattr(_ item: FSItem, name: String) throws -> Data
func setXattr(_ item: FSItem, name: String, value: Data, options: FSTaskOptions) throws
func listXattrs(_ item: FSItem) throws -> [String]
func removeXattr(_ item: FSItem, name: String, options: FSTaskOptions) throws
```
---
## Info.plist Template
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FSExtension</key>
<dict>
<key>FSExtensionPersonality</key>
<string>HelloFS</string>
<key>FSShortName</key>
<string>HelloFS</string>
<key>FSObjectsAreCaseSensitive</key>
<false/>
<key>FSSupportsBlockDevices</key>
<true/>
<key>FSPrimaryClass</key>
<string>HelloFS</string>
</dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.fskit</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).HelloFSExtension</string>
</dict>
</dict>
</plist>
```
---
## Entitlements Template
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
</plist>
```
---
## Testing Commands
**Create block device**
```bash
mkfile -n 100m dummy
hdiutil attach -imagekey diskimage-class=CRawDiskImage -nomount dummy
# Output: disk18 (or diskN)
```
**Mount**
```bash
mkdir /tmp/TestVol
mount -t HelloFS disk18 /tmp/TestVol
```
**Unmount**
```bash
umount /tmp/TestVol
```
---