小编L.W*_*ard的帖子

如何一次写入超过2G的数据()

我已经定义_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)

c linux mmap

3
推荐指数
1
解决办法
126
查看次数

关于map和iterator的C++错误

使用代码:

#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提醒我,上面有一个错误.

c++ iterator

-1
推荐指数
1
解决办法
68
查看次数

标签 统计

c ×1

c++ ×1

iterator ×1

linux ×1

mmap ×1