Реализация записи в файл в файловой системе с помощью FUSE
Я реализую простую файловую систему в памяти с помощью FUSE, используя эту привязку Java https://github.com/dtrott/fuse4j Я делал чтение и создавал поддержку файлов, но не могу заставить работать запись в файл. Я всегда получаю ошибку при попытке написать. Вот несколько реализаций:
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
, fsync
а также release
всегда возвращайте 0.