Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么du-sh输出错误大小的内存映射文件?_C++_Linux_Mmap_Nfs_Du - Fatal编程技术网

C++ 为什么du-sh输出错误大小的内存映射文件?

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命令

我已经在NFS(CentOS7)上创建了一个内存映射文件

但是du-sh显示的文件大小远远小于ls-lastat命令显示的文件大小

du -sh foo.dat
96M     foo.dat
du-bh输出与ls-lastat命令输出匹配

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时,许多关于一致性的假设并不适用。这只是你必须忍受的东西,可能会引起你的兴趣-