C 如何在Linux中在Windows';共享(LINUX)?
我正在Linux中安装Windows共享,uid=1000,gid=1000,因此不会出现权限问题。我确保在windows中正确设置了权限 我可以创建、编辑和删除目录和文件。 但是,我无法在共享上映射文件(在常规装载点上,它可以正常工作) 我也不能fsync目录,但这是可以理解的 如何映射共享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
#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