C 如何在Linux中在Windows';共享(LINUX)?

C 如何在Linux中在Windows';共享(LINUX)?,c,linux,windows,share,mmap,C,Linux,Windows,Share,Mmap,我正在Linux中安装Windows共享,uid=1000,gid=1000,因此不会出现权限问题。我确保在windows中正确设置了权限 我可以创建、编辑和删除目录和文件。 但是,我无法在共享上映射文件(在常规装载点上,它可以正常工作) 我也不能fsync目录,但这是可以理解的 如何映射共享 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h

我正在Linux中安装Windows共享,uid=1000,gid=1000,因此不会出现权限问题。我确保在windows中正确设置了权限

我可以创建、编辑和删除目录和文件。 但是,我无法在共享上映射文件(在常规装载点上,它可以正常工作)

我也不能fsync目录,但这是可以理解的

如何映射共享

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>

int main()
{
    const char * file = "/home/lvm/Sources/SharedVM/blabla";

    int fd = open(file, O_RDWR | O_CREAT | O_SYNC, S_IWUSR | S_IRUSR);
    printf("%d\n", fd);

    int frc = posix_fallocate(fd, 0, 1024L);
    printf("fallocate rc=%d\n", frc);

    void * result = mmap(0, 1024L, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    printf("errno=%d\n", errno);

    printf("addr = %p\n", result);

    printf("res = %p", result); // => 0xffffffffffffffff when windows share, or valid adddress on linux regular mount point

    return 42;
}
如果将文件更改为“/tmp/blabla”,则我们会得到:

3
fallocate rc=0
errno=0
addr = 0x7f9e2de7c000

答案是文件系统不支持fallocate。 该份额为cifs。这就是/tmp文件能够被搁置的原因。
共享ntfs目录有效。cifs没有。

这不是错误号,这是返回码。打印
errno
的实际值以查看errno。我在提交此代码后打印了errno。。它是-1ok。。我的错。是“9”让我再检查一下我的测试我没有注意到我错算了份额。。现在它被重新共享。我得到一个有效的文件描述符。mmap失败,错误号=22。posix_falloc成功了。
3
fallocate rc=0
errno=0
addr = 0x7f9e2de7c000