当前位置: 首页 > news >正文

物流网站html5模板推广app的单子都在哪里接的

物流网站html5模板,推广app的单子都在哪里接的,wordpress 生成 html代码,永州网站建设网站【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Linu…

【图书推荐】《Linux C与C++一线开发实践(第2版)》_linux c与c++一线开发实践pdf-CSDN博客

《Linux C与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书

LinuxC\C++编程技术_夏天又到了的博客-CSDN博客

所谓文件和内存映射,就是将普通文件映射到进程地址空间,然后进程就可以像访问普通内存一样对文件进行访问,而不必再进行调用read或write等操作。系统提供了函数mmap将普通文件映射到内存中,该函数声明如下:

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);

其中,参数start为映射区的起始地址,通常为NULL(或0),表示由系统自己决定映射到什么地址;length表示映射数据的长度,即文件需要映射到内存中的数据的大小;prot表示映射区保护方式,取下列某个值或者它们的组合:

  • PROT_EXEC:映射区可被执行。
  • PROT_READ:映射区可读取。
  • PROT_WRITE:映射区可写入。
  • PROT_NONE:映射区不可访问。

参数flags用来指定映射对象的类型、映射选项和映射页是否可以共享,它的值可以是一个或者多个位的组合,可选值如下:

  • MAP_FIXED:如果参数start指定了需要映射到的地址,而所指定的地址无法成功建立映射,映射就会失败。通常不推荐使用此设置,而是将start设置为NULL(或0),由系统自动选取映射地址。
  • MAP_SHARED:共享映射区域,映射区域允许其他进程共享,对映射区域写入数据将会写入原来的文件中。
  • MAP_RIVATE:对映射区域进行写入操作时会产生一个映射文件的复制,即写入复制(copy on write),而读操作不会影响此复制。对此映射区的修改不会写回原来的文件,即不会影响原来文件的内容。
  • MAP_ANONYMOUS:建立匿名映射,映射区不与任何文件关联,而且映射区无法与其他进程共享。
  • MA_DENYWRITE:对文件的写入操作将被禁止,不允许直接对文件进行操作。
  • MAP_LOCKED:将映射区锁定,防止页面被交换出内存。

参数flags必须为MAP_SHARED或者MAP_PRIVATE二者之一的类型。MAP_SHARED类型表示多个进程使用的是一个内存映射的副本,任何一个进程都可以对此映射进行修改,其他的进程对其修改是可见的。而 MAP_PRIVATE则是多个进程使用的文件内存映射,在写入操作后,会复制一个副本给修改的进程,多个进程之间的副本是不一致的。

参数fd表示文件描述符,一般由open()函数返回;参数offset表示被映射数据在文件中的起点。

mmap()映射后,让用户程序直接访问设备内存,相较于在用户空间和内核空间互相复制数据,其效率更高,因此在要求高性能的应用中比较常用。mmap映射内存必须是页面大小的整数倍,面向流的设备不能进行mmap,mmap的实现和硬件有关。

下面这个例子显示了把文件映射到内存的方法。

【例4.11】文件与内存映射

(1)打开Visual Studio Code,新建文本文件,输入代码如下:

#include <sys/mman.h> /* for mmap and munmap */  
#include <sys/types.h> /* for open */  
#include <sys/stat.h> /* for open */  
#include <fcntl.h>     /* for open */  
#include <unistd.h>    /* for lseek and write */  
#include <stdio.h>  int main(int argc, char **argv)  
{  int fd;  char *mapped_mem, * p;  int flength = 1024;  void * start_addr = 0;  fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);  flength = lseek(fd, 1, SEEK_END);  write(fd, "\0", 1); /* 在文件最后添加一个空字符,以便下面的printf正常工作 */  lseek(fd, 0, SEEK_SET);  mapped_mem =(char*) mmap(start_addr,flength,PROT_READ,        			// 允许读  MAP_PRIVATE,       			// 不允许其他进程访问此内存区域  fd,0);  /* 使用映射区域 */  printf("%s\n", mapped_mem); /* 为了保证这里工作正常,参数传递的文件名最好是一个文本文件 */  close(fd);  munmap(mapped_mem, flength);  return 0;  
}  

(2)保存代码为test.cpp,上传到Linux,在命令行下编译并运行:

# g++ test.cpp -o test
# ./test myfile.txt 
hello
boy

可以发现,程序把文件中的内容映射到内存后,再把该内存区域打印出来,显示的正是文件中的内容。其中,myfile.txt是自己新建的文本文件。

上面的方法因为用了PROT_READ,所以只能读取文件里的内容,不能修改,如果换成PROT_WRITE,就可以修改文件的内容了;又由于用了MAAP_PRIVATE,因此此进程只能使用此内存区域,若换成MAP_SHARED,则可以被其他进程访问,请看下例。

【例4.12】修改文件的内存映像

(1)打开Visual Studio Code,新建文本文件,输入代码如下:

#include <sys/mman.h> /* for mmap and munmap */  
#include <sys/types.h> /* for open */  
#include <sys/stat.h> /* for open */  
#include <fcntl.h>     /* for open */  
#include <unistd.h>    /* for lseek and write */  
#include <stdio.h>  
#include <string.h> /* for memcpy */  int main(int argc, char **argv)  
{  int fd;  char *mapped_mem, * p;  int flength = 1024;  void * start_addr = 0;  fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);  flength = lseek(fd, 1, SEEK_END);  write(fd, "\0", 1); // 在文件最后添加一个空字符,以便下面的printf正常工作 lseek(fd, 0, SEEK_SET);  start_addr = (void*)0x80000;  mapped_mem = (char*)mmap(start_addr,flength,PROT_READ|PROT_WRITE,        // 允许写入  MAP_SHARED,       // 允许其他进程访问此内存区域  fd,0);  // 使用映射区域printf("%s\n", mapped_mem); // 为了保证这里正常工作,参数传递的文件名最好是一个文本文件  while ((p = strstr(mapped_mem, "hello"))) { // 此处来修改文件内容,hello必须在文件中已经有了memcpy(p, "Linux", 5);  // 我们把hello改为Linuxp += 5;  }  close(fd);  munmap(mapped_mem, flength);  return 0;  
}  

(2)保存代码为test.cpp,上传到Linux,在命令行下编译并运行:

# g++ test.cpp -o test
# ./test myfile.txt 
hello
boy

再次查看myfile.txt,可以发现内容变了:

# cat myfile.txt 
Linux
boy

说明我们修改内存映像成功了。

http://www.khdw.cn/news/27256.html

相关文章:

  • 无锡网站制作google高级搜索
  • 泰安卫生人才网郑州seo代理外包公司
  • 企业网站的功能模块北京网络营销外包公司哪家好
  • 智慧农业网站开发相关文档营销技巧美剧
  • 荆门网站制作公司淘宝运营培训机构
  • 网站首页命名怎么可以在百度发布信息
  • 国家优化防控措施应用商店优化
  • 黄岛开发区做网站的公司seo搜索引擎官网
  • 做馋嘴小栈官方网站谷歌seo关键词排名优化
  • 焦作网站建设哪家专业百度官方下载
  • 登陆网站怎么做淘宝网页版
  • 通过音乐做网站外链百度自动优化
  • 玉田网站设计公司平台关键词排名优化
  • wap网站开发价钱东莞网站建设优化排名
  • 响应式网站建设软文推广app软件
  • 淘宝做网站的都是模板做网络推广可以通过哪些渠道推广
  • wordpress使用域名访问湖南seo公司
  • 哈尔滨暂停现场业务seo公司上海牛巨微
  • 做视频网站教程无锡网站seo
  • 国外logo设计网站推荐成人技术培训班有哪些种类
  • 南宁网站建设公司哪家好如何网站关键词优化
  • 东莞网站关键词排名互联网营销软件
  • 大连网站建设案例一键优化清理手机
  • asp.net 网站 方案长沙 建站优化
  • 网站开发体会批量查询收录
  • 做网站经费网络营销站点推广的方法
  • 河南网站建设网络公司站长工具seo综合查询分析
  • 西安竞价托管名词解释搜索引擎优化
  • 乌鲁木齐网站建设哪家好免费招聘信息发布平台
  • 网站制作 上海网络热线新媒体平台