保险丝 - 实现写操作

时间:2014-06-14 21:20:10

标签: filesystems fuse

我正在编写一个自定义保险丝镜像文件系统(在Ubuntu中使用FUSE-JNA)。通过镜像我的意思是,它将读取并写入本地文件系统的目录。

我实现了getattr,create和read操作,如下所示。所有这些都很完美。

...
private final String mirroredFolder = "./target/mirrored";
...
...

    public int getattr(final String path, final StatWrapper stat)
{   

    File f = new File(mirroredFolder+path);         

    //if current path is of file
    if (f.isFile())
    {
        stat.setMode(NodeType.FILE,true,true,true,true,true,true,true,true,true);
        stat.size(f.length());
        stat.atime(f.lastModified()/ 1000L);
        stat.mtime(0);
        stat.nlink(1);
        stat.uid(0);
        stat.gid(0);
        stat.blocks((int) ((f.length() + 511L) / 512L));
        return 0;
    }


    //if current file is of Directory
    else if(f.isDirectory())
    {
        stat.setMode(NodeType.DIRECTORY);
        return 0;
    }





    return -ErrorCodes.ENOENT();
}

下面的create方法在镜像文件夹中创建新文件

    public int create(final String path, final ModeWrapper mode, final FileInfoWrapper info)
{
    File f = new File(mirroredFolder+path);
    try {
        f.createNewFile();
        mode.setMode(NodeType.FILE, true, true, true);
    } catch (IOException e) {
        e.printStackTrace();
    }


    return 0;
}

读取方法从镜像文件夹中读取文件

    public int read(final String path, final ByteBuffer buffer, final long size, final long offset, final FileInfoWrapper info)
{

    String contentOfFile=null;
    try {
        contentOfFile= readFile(mirroredFolder+path);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    final String s = contentOfFile.substring((int) offset,
            (int) Math.max(offset, Math.min(contentOfFile.length() - offset, offset + size)));
    buffer.put(s.getBytes());
    return s.getBytes().length;

}

但我的写操作无效。

以下是我的Write方法,该方法不完整。

public int write(final String path, final ByteBuffer buf, final long bufSize, final long writeOffset,
        final FileInfoWrapper wrapper)
{

    return (int) bufSize;
}

当我在调试器模式下运行时,路径参数显示Path = / .goutputstream-xxx(其中xxx是每次调用write方法时随机的字母数字)

请指导我如何正确实现写操作。

1 个答案:

答案 0 :(得分:1)

只需写入您提供的文件名即可。 How do I create a file and write to it in Java?

您看到path=/.goutputstream-xxx的原因是https://askubuntu.com/a/151124。这不是fuse-jna中的错误。