この Java バインディングhttps://github.com/dtrott/fuse4jを使用して、FUSE で単純なメモリ内ファイル システムを実装しています。ファイル サポートの読み取りと作成を行いましたが、ファイルへの書き込みが機能しません。書き込もうとすると必ずエラーになります。いくつかの実装を次に示します。
public int truncate(String s, long l) throws FuseException {
System.out.println("truncate: " + s + " l: " +l);
Node node = lookup(s);
if (node == null)
return Errno.ENOENT;
node.setFileSize(node.getFileSize()+l);
return 0;
}
public int statfs(FuseStatfsSetter fuseStatfsSetter) throws FuseException {
fuseStatfsSetter.set(512, 1000, 200, 180, 5, 29, 20);
return 0;
}
public int open(String s, int i, FuseOpenSetter fuseOpenSetter) throws FuseException {
System.out.println("open: " + s);
Node node = lookup(s);
if (node == null)
return Errno.ENOENT;
fuseOpenSetter.setFh(node);
return 0;
}
public int read(String s, Object o, ByteBuffer byteBuffer, long l) throws FuseException {
System.out.println("read: " + s);
Node node = lookup(s);
if (node == null)
return Errno.EBADF;
if (node.getContents() != null)
byteBuffer.put(node.getContents());
return 0;
}
public int write(String s, Object o, boolean b, ByteBuffer byteBuffer, long l) throws FuseException {
System.out.println("write: " + s + " byte: " + byteBuffer.array().length + " l: " + l);
Node node = lookup(s);
if (node == null)
return 0;
node.setContents(byteBuffer.array());
node.setFileSize(node.getFileSize()+byteBuffer.array().length);
return byteBuffer.array().length;
}
statfs
特定の意味を持たないハードコードされた値を使用しflush
、常に 0 を返しますfsync
。release