我一直在处理开放式的SSUSE11.2×86_64的大量零件档案。 当我试图用1TB的稀释文档时,它就没有ENOMEM。 我本来会认为,64个轨道地址空间足以在空中绘制地图,但似乎并非如此。 另外,1个GB卷宗的试验效果良好,但2个GB(和任何较大的)卷宗失败。 我猜测,可能有一个地方来拖瓦,但广泛的搜索却无所作为。
这里有一些显示问题的样本代码――任何杂质?
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
char * filename = argv[1];
int fd;
off_t size = 1UL << 40; // 30 == 1GB, 40 == 1TB
fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0666);
ftruncate(fd, size);
printf("Created %ld byte sparse file
", size);
char * buffer = (char *)mmap(NULL, (size_t)size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if ( buffer == MAP_FAILED ) {
perror("mmap");
exit(1);
}
printf("Done mmap - returned 0x0%lx
", (unsigned long)buffer);
strcpy( buffer, "cafebabe" );
printf("Wrote to start
");
strcpy( buffer + (size - 9), "deadbeef" );
printf("Wrote to end
");
if ( munmap(buffer, (size_t)size) < 0 ) {
perror("munmap");
exit(1);
}
close(fd);
return 0;
}