使用mmap() 进行两文件复制,源文件为文本文件, 使用mmap进行文件映射。 目标文件为创建的一个临时文件,使用mmap映射了与源文件一样的大小。 然后两个映射区进行内存的复制,完成后,发现目标文件不是文本文件,不能使用文本编辑器打开,使用od -c查看,内容与原文件一样的,文本文件怎复制到目标文件为二进制文件了呢? 请教各位如何得到目标文件仍为文本文件,谢谢。 [ 本帖最后由 disheng727 于 2008-12-25 16:47 编辑 ]
by disheng727 - C/C++ - 2008-12-25 18:43:14 阅读(2943) 回复(7)
如题,我想把文件映射到内存后,修改数据,然后再写回文件,但是实现不了,帮忙看一下,谢了
#include "ace/Mem_Map.h"
#include
程序大概如下: void*malloc_shared_memory(size_t size) { int fd; void* ptr; char buffer[32]; static char* shared_file = "/tmp/special.shared.XXXXXX"; assert(size > 0); strlcpy(buffer, shared_file, sizeof(buffer)); if ((fd = mkste...
我使用mmap把文件test.txt和字符串char *str对应起来。 但在对应的过程中,在程序向字符串写数据的过程中,文件不小心被删除了,那怎么还保证str的数据不丢失呢? 或者说有没有这样的机制,让str在写入文件的时候,检测下对应的文件是否存在。不存在则新建个同名的对应文件,然后把str数据写进文件。 原来一直以为文件打开映射后,文件不能被删除,现在发现linux下可以照常删除。 我当时用的是Ace 的mmap。 希望各位大牛踊跃发言...
手头上有一个网络服务, 用mmap来快速读取数据并返回, 并且在有更改请求的时候, 更新mmap文件的数据. 现在性能上有压力, 每分钟请求数到15000, 想用多进程来缓解, 大概思路是这样的: |<---shm channel---> 进程1 <-----mmap----->| netio |<---shm channel---> 进程2 <-----mmap----->| data files |<---shm channel---> 进程3 <-----mmap----->| 从netio上过来的请求分两种, 一是update数据请求, 二是r...
大小为8192(页面的整数倍)时,无法读取src+7680之后的部分,是什么原因?系统是SunOS 5.9;
dbx如:
(dbx) print src+7680
src+7680 = 0xfe221e00 "