我已经定义_LARGEFILE64_SOURCE并 _FILE_OFFSET_BITS 64
支持超过2G的open()文件.这似乎没问题.
但是如果我一次尝试写入()数据超过2G(例如64G),write()将返回一个远小于64G的值(完全是2147479552).我猜write()只能一次写入小于2G的数据.
这是我的代码:
#define _GNU_SOURCE
#define _LARGEFILE_SOURCE
#define _LARGEFILE64_SOURCE
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
#include <unistd.h>
#include <mmap.h>
#define SPACE_SIZE 68719476736
int main()
{
ssize_t err;
void* zeros;
int fd = open64("./test", O_CREAT|O_RDWR|O_LARGEFILE, 0644);
assert(fd != -1);
int zero_fd = open("/dev/zero", O_RDWR);
assert(zero_fd != -1);
zeros = mmap(NULL, SPACE_SIZE, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, zero_fd, 0);
assert(zeros != (void *)-1);
err = write(fd, zeros, SPACE_SIZE);
assert(err == SPACE_SIZE); …Run Code Online (Sandbox Code Playgroud) 使用代码:
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<int, std::map<std::string, int>> mm;
std::map<std::string, int>::iterator iter = mm.find(1);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Class 'std::_Rb_tree_iterator<std::pair<const int,
std::map<std::string, int>>>' is not compatible with class
'std::map<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char>>, int>::iterator'
Run Code Online (Sandbox Code Playgroud)
我没有编译代码.Clion提醒我,上面有一个错误.