2016-04-04 24 views
2

LinuxにWindows共有を-o uid=1000,gid=1000でマウントしているため、アクセス権の問題は発生しません。私はアクセス許可がWindowsで正しく設定されていることを確認しました。Windowsのshare(LINUX)環境下でファイルをLinuxでmmapする方法は?

ディレクトリやファイルを作成、編集、削除できます。 しかし、共有上のファイルをmmapすることはできません(通常のマウントポイントで動作します)。

私はfsyncディレクトリもできませんが、これは理解できます。

共有をmmapするにはどうすればいいですか?

#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 
+0

これはerrnoではない、つまりリターンコードです。 errnoを見るために 'errno'の実際の値を出力します。 –

+0

私はこのコードを提出した後にerrnoを印刷しました。それは-1 – Adi

+0

でした。私の悪いです。それは "9"でした – Adi

答えて

0

まあ、答えはファイルシステムではサポートしていません。堕落した。 シェアはcifsでした。そういうわけで、/ tmpファイルを置き去りにしたのです。 ntfsディレクトリの共有が機能します。 cifsはありません。

関連する問題