gpt4 book ai didi

c - 如何在 Linux 中映射 Windows 共享 (LINUX) 下的文件?

转载 作者:可可西里 更新时间:2023-11-01 10:43:49 25 4
gpt4 key购买 nike

我正在使用 -o uid=1000,gid=1000 在 Linux 中安装 Windows 共享,因此不会出现权限问题。我确保在 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;
}

结果:

3
fallocate rc=0
errno=22
addr = 0xffffffffffffffff

如果将文件更改为“/tmp/blabla”,那么我们会得到:

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

最佳答案

嗯,答案是文件系统不支持fallocate。份额是到岸价。这就是/tmp 文件能够被分配的原因。共享 ntfs 目录有效。 cifs 没有。

关于c - 如何在 Linux 中映射 Windows 共享 (LINUX) 下的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36400350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com