2016-04-04 24 views
2

Linux'ta bir Windows paylaşımını -o uid=1000,gid=1000 ile yüklüyorum, dolayısıyla hiçbir izin sorunu görünmüyor. Windows'ta izinlerin doğru şekilde ayarlandığından emin oldum.Linux'ta Windows 'paylaşımı (LINUX) altında bir dosya nasıl oluşturulur?

Dizinleri ve dosyaları silme, düzenleme ve silme yapıyorum. Ancak, paylaşımdaki bir dosyayı kopyalayamıyorum (normal bağlama noktasında çalışır).

Ayrıca, dizinleri fsync kullanamıyorum, ancak bu anlaşılabilir bir durumdur.

Paylaşma nasıl yapılır?

#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; 
} 

Sonuç:

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

için "/ tmp/blabla" o zaman alacağınız dosyayı değiştirerek eğer iken:

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

Bu errno değil, dönüş kodu. Errno'yu görmek için 'errno'nun gerçek değerini yazdırın. –

+0

Bu kodu gönderdikten sonra errno'yu yazdırdım. -1 – Adi

+0

tamam oldu. "9" – Adi

cevap

0

Peki, cevap dosya sistemi desteklemediği fallocate. Paylaşım cifs idi. Bu yüzden/tmp dosyası falloplanmış olabilir. Paylaşım ntfs dizini çalışıyor. cifs yapmaz.