C++ 为什么du-sh输出错误大小的内存映射文件?
我已经在NFS(CentOS7)上创建了一个内存映射文件 但是du-sh显示的文件大小远远小于ls-la或stat命令显示的文件大小C++ 为什么du-sh输出错误大小的内存映射文件?,c++,linux,mmap,nfs,du,C++,Linux,Mmap,Nfs,Du,我已经在NFS(CentOS7)上创建了一个内存映射文件 但是du-sh显示的文件大小远远小于ls-la或stat命令显示的文件大小 du -sh foo.dat 96M foo.dat du-bh输出与ls-la,stat命令输出匹配 du -bh foo.dat 718M foo.dat ls-la给出了正确的字节数 ls -la foo.dat -rw-r--r-- 1 david users 752562176 Apr 20 03:58 foo.dat stat命令
du -sh foo.dat
96M foo.dat
du-bh输出与ls-la,stat命令输出匹配
du -bh foo.dat
718M foo.dat
ls-la给出了正确的字节数
ls -la foo.dat
-rw-r--r-- 1 david users 752562176 Apr 20 03:58 foo.dat
stat命令输出如下
stat foo.dat
File: ‘foo.dat’
Size: 752562176 Blocks: 196555 IO Block: 131072 regular file
Device: 31h/49d Inode: 26822713 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1035/ david) Gid: ( 100/ users)
Access: 2018-04-21 03:55:58.305448765 -0500
Modify: 2018-04-21 03:58:05.293052537 -0500
Change: 2018-04-21 03:58:05.293052537 -0500
Birth: -
我想知道为什么du-sh报告的大小不正确。如果在本地磁盘/tmp中创建内存映射文件,则情况并非如此
感谢您的帮助
谢谢。我认为du显示的大小变小了,因为我正在创建稀疏文件。我不是按顺序写的,编程问题也是如此,而不是关于使用或配置Linux及其应用程序的问题。SuperUser.com或unix.stackexchange.com可能是解决此类问题的更好地方。磁盘块信息在更改发送到服务器之前不会更新,因为它取决于远程文件系统实现。@Barmar这是一个编程问题。我使用mmap创建了这个文件,并定期使用msync同步内容。du-bh似乎返回了正确的值。我在这里关心的是,如果文件不在进程之间共享,那么在NFS上使用mmap是否存在任何问题。只有一个进程将对其进行读/写操作。通常,当涉及NFS时,许多关于一致性的假设并不适用。这只是你必须忍受的东西,可能会引起你的兴趣-