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

企业网站手机版模板免费下载网络推广营销公司

企业网站手机版模板免费下载,网络推广营销公司,小程序电商系统开发,俄罗斯搜索引擎yandex推广入口【图书推荐】《Linux C与C一线开发实践#xff08;第2版#xff09;》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践#xff08;第2版#xff09;#xff08;Linux技术丛书#xff09;》(朱文伟#xff0c;李建英)【摘要 书评 试读】- 京东图书 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映射内存必须是页面大小的整数倍面向流的设备不能进行mmapmmap的实现和硬件有关。 下面这个例子显示了把文件映射到内存的方法。 【例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.hkea.cn/news/14417713/

相关文章:

  • 取名字的网站 优帮云信游天下网站建设
  • 济南网站建设是什么意思网站推广宜选刺盾云下拉
  • 租赁网站空间成都前几年网站建设公司
  • 网站建设需要的技术手段影视类网站建设
  • 湟中县公司网站建设做外贸网站多少钱
  • 怎么知道网站是哪个公司做的深入解析wordpress(原书第2版) pdf
  • 灵台县门户网站设计免费
  • 网站建设源码导入平面设计课程培训
  • 旅游网站模板重庆市万州建设工程信息网
  • 房山建站公司成都网站建设时代汇创
  • 西宁建站济南道驰网站建设有限公司怎么样
  • 绍兴专业做网站的公司APP做网站
  • 南昌电商购物网站开发哈尔滨的网站建设公司
  • 九江网站排名建盏的好坏怎么区分
  • 品牌网站建设 意义织梦网站上传保存文档
  • 动漫谷网站建设策划书网站建设策划案模板
  • iis 新建网站没有文件夹权限展厅设计服务商
  • 新网站建设运营年计划书东营考试信息网官网2020
  • 公司找人做网站做网站的公司主要是干啥
  • 农安县建设局网站个人网站可以做网上支付吗
  • 自己怎么做网站购买空间系统开发流程和步骤
  • 网站制作的要求怎样上传网站
  • 哈尔滨建设网站哪家好网站搜索优化技巧
  • 做网站的数据库的设计网站开发语言怎么识别
  • 住房和城乡建设部课题网站山东做网站的公司有哪些
  • 惠来县建设局网站深圳企业网页制作
  • 备案 网站起名网站设计有哪些专业术语
  • 给网站做插画分辨率wordpress 使用七牛云
  • 石家庄哪里有做网站宁波seo整站优化
  • 电子商务网站有哪几种阿里巴巴个人网站怎么做