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

子网站域名ip地址查询wordpress 爬虫插件

子网站域名ip地址查询,wordpress 爬虫插件,网站设计是不是会要用代码做,深圳摇号申请注册学习这篇博客,进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280 >>读取文件 读取文件方法:由操作系统提供的两个方法,read和write来读写文件。 由…

 学习这篇博客,进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280

>>读取文件

读取文件方法:由操作系统提供的两个方法,read和write来读写文件。

由于read和write是系统调用,需要先从用户态进入到内核态,再将磁盘中的数据拷贝到操作系统的缓冲区中,然后再将缓冲区中的数据拷贝到用户态中,这个过程进行了两次拷贝。

 >>mmap

① memory map:是一种内存映射文件的方法。

② mmap是一个可以将一个文件或者其他对象映射到进程的地址空间实现磁盘的地址和进程虚拟地址空间一段虚拟地址的一一对应关系。

③ mmap系统调用可以让进程之间通过映射到同一个普通文件实现共享内存,普通文件被映射到进程地址空间当中,之后进程可以向访问普通内存一样对文件进行一系列操作。

【总结】

① 日常中使用read或者write需要进行两次拷贝,一次是将文件拷贝到内核缓冲区,一次是从内核缓冲区拷贝到用户缓冲区。

② 使用mmap可以减少第二次拷贝,由于内核将文件映射到内存,之后用户进程就可以操作这些数据了,用户进程只需要修改内核中的内容,接着通过内核的内存管理器自动将这些数据刷新到磁盘当中。

③ mmap可以提高内存性能,内核空间和用户空间共用一个缓冲区,当多个进程正在对同一个文件进行IO操作,那么通过使用mmap能够共享一个内核缓冲区,从而可以减少内存消耗。

 用户态中的mmap函数以及相关参数详解:

mmap的使用#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);函数说明:创建虚拟内存到物理内存或者文件的映射参数:- addr:映射区的起始地址,如果是NULL,系统自动分配- length:字节长度自动按照4KB对齐,建议大小一般填成4KB的整数倍- prot:映射区域的权限- flags:映射的标志位- fd:文件描述符- offset:文件偏移量自动按照4KB对齐prot 的取值:PORT_EXEC:映射的区域具有可执行权限PROT_READ:映射的区域具有可读权限PROT_WRITE:映射区域具有可写权限PROT_NONE:映射区域不可被访问对应flags的取值:MAP_SHARED:对映射区域的写入操作直接反映到文件中MAP_FIXED:若在start上无法创建映射则失败(如果没有此标记会自动创建)MAP_PRIVATE:对映射区域的写入操作只反映到缓冲区当中不会写入到真正的文件MAP_ANONYMOUS:匿名映射将虚拟地址映射到物理内存而不是文件(忽略fd)MAP_DENYWRITE:拒绝其它文件的写入操作MAP_LOCKED:锁定映射区域保证其不被置换返回值:函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址

 内核态中的mmap函数:

int mmap(struct file* filp,struct vm_area_struct* vma),

>>用户态的mmap函数实现映射到物理内存

#include <iostream>
#include <sys/mman.h>
#include <cstring>
#include <cerrno>
#include <cstdio>
using namespace std;
static const int SIZE = 4096;
int main()
{char *str = (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);//注意MAP_PRIVATE和MAP_SHARED//建立映射if (str == MAP_FAILED){printf("%s\n", strerror(errno));return -2;}strcpy(str, "hello ksy");puts(str);//用于取消映射munmap(str, SIZE);return 0;
}

 >>用户态的mmap函数实现映射到文件

#include <iostream>
#include <sys/mman.h>
#include <cstring>
#include <cerrno>
#include <cstdio>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
using namespace std;
static const int SIZE = 4096;
int main()
{int fd = open("./a.txt", O_RDWR | O_CREAT, 0644);truncate("a.txt", 1024);if (fd < 0){printf("%s\n", strerror(errno));return -1;}char *str = (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);//注意MAP_PRIVATE和MAP_SHARED//建立映射if (str == MAP_FAILED){printf("%s\n", strerror(errno));close(fd);return -2;}strcpy(str, "helloworld");close(fd);return 0;
}

【注意】

如果不加truncate("a.txt", 1024);会出现总线错误 (核心已转储)

【原因】mmap是虚拟内存映射到文件(物理内存)。由于heheda.txt是新创建的,也就是0个字节。那么在映射时候也是映射了0个字节,这个文件映射过来的内存是没有的,所以我们往里面写东西就会崩溃,truncate函数对文件提前处理一下:

int truncate(const char *path, off_t length);

函数说明:truncate()会将参数path指定的文件大小改为参数length指定的大小。

如果原来的文件大小比参数length大,则超过的部分会被删除。可以提前使用这个函数提前将文件的大小进行设置,就可以向映射的这块内存进行写入了。也就可以成功将其写入到文件中了

http://www.15wanjia.com/news/196664.html

相关文章:

  • 网站建设与推广范文精准流量推广
  • 推广网站建设个人网站模板怎么做
  • 西安网站seo公司建设网站需要的步骤
  • 网站建设相关新闻校园网站建设的意义
  • 外卖网站那家做的好处上海阳性增多
  • 凡客诚品网站推广网络推广文案策划
  • 制作网站参考案例上传 wordpress
  • 可用来做外链推广的网站网站项目团队介绍怎么写
  • wordpress本地网站上传wordpress栏目分类
  • 怎样查看网站是否备案网站怎么自适应屏幕大小
  • 做曖网站网站做三层结构
  • 武冈企业建站新产品营销策划
  • 安徽建工集团网站手机网站首页模板
  • 房地产网站模板库连云港百度推广总代理
  • 北京网站推广外包wordpress外链跳转过渡页插件
  • 石家庄站内换乘示意图厦门seo顾问
  • php网站如何上传数据库网站免费优化平台
  • 企业管理软件销售好做吗seo推广需要网站吗
  • 企业网站开发的功能灰系网站
  • 哈尔滨网站关键词优化排名电子商务最好的出路
  • o2o网站做推广公司网站建设原因分析
  • 网站质量需求厦门律师网站建设
  • 加强部门网站建设工作手机浏览器输入网址
  • 个人网站有哪些动画专业大学排名前十强
  • 网站是什么时候出现的电子烟网站建设
  • 音乐网站开发工具浙江网站建设商城价格
  • 网站备案抽查通过网站设计论文的题目
  • 专门卖电子产品的网站公司网站简介怎么做
  • 网站的首页设计电子商务网站建设的流程图
  • 酷炫html5网站网站建设用户量分析