我试过这个:
double *mat = (double *) mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
其中sb.st_size是文件的大小,fd 是打开文件的描述符。如果我想遍历所有元素,我只得到 0,但文件只有非 0 值。这有什么问题?
你不能
。
如果你真的有一个文本文件,那么你就有了文本数字,几乎就像一个电子表格:
1.0 2.0 3.0
1.1 2.1 3.1
您不能mmap
该文件并将映射的内存视为double*
,因为那是字符数据。
为了将文件从字符数据转换为双精度,您必须执行诸如fscanf
或scanf
之类的操作来处理数字。
另一方面,如果你写出一团双精度作为二进制数据,那么你就可以做mmap
,几乎就像你描述的那样。