-
Notifications
You must be signed in to change notification settings - Fork 671
FUSE
Dokan Fuse is a wrapper library that makes Dokan compatible with FUSE API. Now available by default in main source repository and installers, Dokan Fuse comes from an original work of Alex Besogonov, fuse4win project.
To use it, you only have to link with the dynamic library dokanfuse.dll.
- Currently special entries '.' and '..' in walk_directory/walk_directory_getdir are not processed correctly. Particularly, they have incorrect timestamps. Fix this.
- Try to emulate Unix permissions using Windows ACLs.
- Fix symlink handling.
The table bellow describes the approximate mapping required if you attempt to port your FUSE application manually without Dokan Fuse.
FUSE | Dokan |
---|---|
fuse_operations::mknod fuse_operations::create fuse_operations::open fuse_operations::mkdir fuse_operations::opendir |
DOKAN_OPERATIONS::CreateFile DOKAN_OPERATIONS::OpenDirectory |
fuse_operations::release fuse_operations::releasedir |
DOKAN_OPERATIONS::Cleanup |
fuse_operations::read | DOKAN_OPERATIONS::ReadFile |
fuse_operations::write | DOKAN_OPERATIONS::WriteFile |
fuse_operations::flush | DOKAN_OPERATIONS::FlushFileBuffers |
fuse_operations::readdir | DOKAN_OPERATIONS::FindFiles |
fuse_operations::utimens | DOKAN_OPERATIONS::SetFileAttributes |
fuse_operations::getattr | DOKAN_OPERATIONS::GetFileInformation |
fuse_operations::access | DOKAN_OPERATIONS::GetFileSecurity |
fuse_operations::unlink | DOKAN_OPERATIONS::DeleteFile |
fuse_operations::rmdir | DOKAN_OPERATIONS::DeleteDirectory |
fuse_operations::rename | DOKAN_OPERATIONS::MoveFile |
fuse_operations::truncate fuse_operations::ftruncate |
DOKAN_OPERATIONS::SetEndOfFile |
fuse_operations::lock | DOKAN_OPERATIONS::LockFile DOKAN_OPERATIONS::UnlockFile |
fuse_operations::chmod fuse_operations::chown |
DOKAN_OPERATIONS::SetFileSecurity |
fuse_operations::statfs | DOKAN_OPERATIONS::GetDiskFreeSpace DOKAN_OPERATIONS::GetVolumeInformation |
Depending of your FUSE implementation, it is posible that you have an error when you try to rename or remove a file. This is happening because Linux & Windows handle differently how a file is rename & removed. See https://github.com/dokan-dev/dokany/issues/178#issuecomment-187881947 for more informations.
You need to use the same toolchain to compile your own dokanfuse and your FUSE program to make it compatible. Neglect of doing so will result in mysterious problems like stack overflows and BSOD.
If you use MSVC to compile your FUSE program you have to use struct FUSE_STAT instead of struct stat in the source code. The dokanfuse1.dll distributed is compiled by MSVC, which means it's not compatible with other compilers for types used in other compilers are not all the same.
The cygdokanfuse1.dll distributed is compiled by cygwin gcc. You can also build it yourself with:
cd dokan_fuse/
cmake .
make
Be aware that cygdokanfuse1.dll has dependencies to cygwin1.dll, cyggcc_s-seh-1.dll and cygstdc++-6.dll.
As a sample, to build fusexmp (mirror sample on libfuse project or /samples/fuse_mirror/) use the following command line:
gcc fusexmp.c -I/dokany/dokan_fuse/include -D_FILE_OFFSET_BITS=64 -L/dokany/dokan_fuse -lcygdokanfuse1
Language | Project |
---|---|
Python | fusepy |
Javascript | fuse-bindings, fuse4js |
Java | fuse-jna, jnr-fuse |
Ruby | rfusefs |
.NET (C#, VB.NET ...) | mono-fuse |
Dokan
Project Home | Wiki | Releases | Issues