You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Andrew Osheroff f6dcf4b680
Update README.md
5 years ago
test Added statfs test 5 years ago
README.md Update README.md 5 years ago
bin.js add bin 5 years ago
binding.gyp tests all pass 5 years ago
example.js Bug fixes 5 years ago
fuse-native.c Remove destroy handling 5 years ago
index.js Remove destroy handling 5 years ago
package.json add bin 5 years ago
semaphore.h reimpl 5 years ago

README.md

fuse-native

Multithreaded FUSE bindings for Node JS.

Features

  • N-API support means we ship prebuilds and in general works on new Node.js releases.
  • Multithreading support means multiple calls to FUSE can run in parallel.
  • Close to feature complete in terms of the the FUSE API.
  • Embedded shared library support means users do not have to install FUSE from a 3rd party.
  • API support for initial FUSE kernel extension configuration so you can control the user experience.

Installation

npm i fuse-native --save

Example

const ops = {
  readdir: function (path, cb) {
    if (path === '/') return cb(null, ['test'])
    return cb(Fuse.ENOENT)
  },
  getattr: function (path, cb) {
    if (path === '/') return cb(null, stat({ mode: 'dir', size: 4096 }))
    if (path === '/test') return cb(null, stat({ mode: 'file', size: 11 }))
    return cb(Fuse.ENOENT)
  },
  open: function (path, flags, cb) {
    return cb(0, 42)
  },
  release: function (path, fd, cb) {
    return cb(0)
  },
  read: function (path, fd, buf, len, pos, cb) {
    var str = 'hello world'.slice(pos, pos + len)
    if (!str) return cb(0)
    buf.write(str)
    return cb(str.length)
  }
}

const fuse = new Fuse(mnt, ops, { debug: true })
fuse.mount(function (err) {
  fs.readFile(path.join(mnt, 'test'), function (err, buf) {
    // buf should be 'hello world'
  })
})

API

In order to create a FUSE mountpoint, you first need to create a Fuse object that wraps a set of implemented FUSE syscall handlers:

const fuse = new Fuse(mnt, handlers, opts = {})

Create a new Fuse object.

mnt is the string path of your desired mountpoint. handlers is an object mapping syscall names to implementations. The complete list of available syscalls is described below. As an example, if you wanted to implement a filesystem that only supports getattr, your handle object would look like:

{
  getattr: function (path, cb) {
    if (path === '/') return process.nextTick(cb, null, stat({ mode: 'dir', size: 4096 }))
    if (path === '/test') return process.nextTick(cb, null, stat({ mode: 'file', size: 11 }))
    return process.nextTick(cb, Fuse.ENOENT)
  }
}

The following FUSE API methods are supported:

FUSE API

TODO

License

MIT for these bindings.

See the OSXFUSE license for MacOS and the libfuse license for Linux/BSD for the FUSE shared library licence.