C代碼
int ftruncate(int fd, off_t length)
int msync(void *addr, size_t len, int flags)
首先,man手冊裡面ftruncate說是當length大於文件本身的大小的話,會擴大文件的話並補'\0'的,可是我在arm-linu-gcc 3.4下卻不是。
還有就是msync的話起始地址(也就是addr)必須是頁大小的倍數,這樣的話我們每次都要這麼做:
假設起始地址是mmap,頁大小是pagesize,所需要同步的長度為length.這時我們需要同步的起始地址就是:
(mmap/pagesize) * pagesize.而長度我們也需要擴展,這時長度就是length + mmap %pagesize.這時就可以正常同步了..