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

怎么在百度上做网站网站开发人员需要具备的能力

怎么在百度上做网站,网站开发人员需要具备的能力,谷歌搜索引擎镜像入口,公司网站建设管理办法01. 共享内存简述 共享内存是一个允许多个进程直接访问同一块物理内存区域的进程通信工具,因其本身不涉及用户态与核心态之间转换,故效率最佳。为了使用一个共享内存段,一般需要以下几个步骤: 调用shmget()创建一个新共享内存段…

01. 共享内存简述

共享内存是一个允许多个进程直接访问同一块物理内存区域的进程通信工具,因其本身不涉及用户态与核心态之间转换,故效率最佳。为了使用一个共享内存段,一般需要以下几个步骤:

  1. 调用shmget()创建一个新共享内存段或获取已有共享内存段的标识符。调用完成返回一个后续需要用到的共享内存标识符
  2. 调用shmat()用将shmid (shmget生成的)标识的共享内存段附加到调用进程的虚拟地址空间中
  3. 到此,程序可以将其与其他内存一样对待。shmat()系统调用会返回该段在虚拟地址空间的始址
  4. 调用shmdt()分离共享内存段,这样进厂将无法继续引用这段空间(可选)
  5. 调用shmctl()删除共享内存段,只有一个进程执行,当所有附加该段到虚拟地址空间的进程都分离之后才能将其销毁
进程1 内核 共享内存区 进程2 shmget(key, size, IPC_CREAT|0666) 返回 shmid shmat(shmid, NULL, 0) 返回内存指针 shm_ptr1 shmget(key, size, 0) 返回相同 shmid shmat(shmid, NULL, 0) 返回内存指针 shm_ptr2 创建物理内存段 写入数据 (e.g., sprintf(shm_ptr1, "Hello")) 读取数据 (e.g., printf("%s", shm_ptr2)) shmdt(shm_ptr1) shmdt(shm_ptr2) shmctl(shmid, IPC_RMID, NULL) 标记为待删除 当所有进程断开后 内核释放物理内存 进程1 内核 共享内存区 进程2

在这里插入图片描述


02. 共享内存接口

2.1 共享内存数据结构

struct shmid_ds {struct ipc_perm shm_perm;  // 权限信息size_t          shm_segsz; // 段大小(字节)time_t          shm_atime; // 最后附加时间time_t          shm_dtime; // 最后分离时间time_t          shm_ctime; // 最后修改时间pid_t           shm_cpid;  // 创建者PIDpid_t           shm_lpid;  // 最后操作PIDshmatt_t        shm_nattch;// 当前附加计数
};

2.2 生成键值key

       #include <sys/types.h>#include <sys/ipc.h>
//将`路径名`和`项目ID`转换成与之对应的`IPC`键值key_t ftok(const char *pathname, int proj_id);

**返回值:**蔡成功返回一个key_t值,失败返回-1

在这里插入图片描述


2.3 创建/获取共享内存段

       #include <sys/ipc.h>#include <sys/shm.h>int shmget(key_t key, size_t size, int shmflg);

参数:

  • key:

    • IPC_PRIVATE(创建新内存)
    • 使用ftok() 生成的键值(用于进程间共享)
  • size:共享内存大小>0

  • shmflg

    • IPC_CREAT(不存在时创建)
    • IPC_EXCL(若存在则失败)
    • 权限位(如 0666

返回值:成功返回共享内存标识符 shmid,失败返回 -1

//part of code   
key_t key = ftok("../test", 'a');int shmid = shmget(key, 1024, IPC_CREAT | 0666);  // 不存在时创建   cout <<"shmid is:"<< shmid << endl;

在这里插入图片描述


2.4 连接共享内存

       #include <sys/types.h>#include <sys/shm.h>
//将共享内存段映射到进程的地址空间void *shmat(int shmid, const void *shmaddr, int shmflg);

参数:

  • shmid: 由shmget()返回的共享内存标识符
  • shmaddr:请求的附加地址:
    • NULL(由系统自动选择地址)
    • 显示指定(不推荐)
  • shmflg
    • SHM_RDONLY(只读)
    • SHM_REMAP(Linux下覆盖现有映射)
    • 0默认行为

返回值:成功返回共享内存的起始地址指针,失败返回 (void *) -1

//同一进程,没啥用  ,只是验证  
char*ptr=(char*)shmat(shmid, NULL, 0);sprintf(ptr, "Hello!");cout << ptr << endl;

2.5 控制共享内存

       #include <sys/ipc.h>#include <sys/shm.h>int shmctl(int shmid, int cmd, struct shmid_ds *buf);

参数:

  • shmid:共享内存标识符

  • cmd(可选):

    • IPC_RMID(标记删除,最后一个进程分离后生效)
    • IPC_STAT(获取状态到 buf
    • IPC_SET(通过 buf 设置参数)
  • buf:用于存储或修改共享内存属性的结构体(cmd后两个选项)

返回值:成功返回0,失败返回 -1


2.6 分离共享内存

       #include <sys/types.h>#include <sys/shm.h>
//解除进程与共享内存段的映射关系int shmdt(const void *shmaddr);//0 success - failed

参数:

  • shmaddr:由shmat()返回的共享内存始址

返回值:成功返回0,失败返回 -1`

注: 分离一个共享内存段删除它是不同的。删除是通过shmctl()选项IPC_ RMID操作来完成的。


03. C/S简单通信

3.2 server.cpp

#include "comm.h"
int main(){key_t key = ftok(PATH_NAME, PROJ_ID);if(key < 0){perror("ftok");return 1;}int shmId = shmget(key, SIZE,IPC_CREAT | IPC_EXCL | 0666);//创建全新的shm,如果和系统已经存在ID冲突,就出错返回if(shmId < 0){perror("shmget");return 2;}printf("key->%u, shmId->%d\n", key, shmId);//sleep(1);char* mem = (char*)shmat(shmId, NULL, 0);//建立关联printf("attaches shm success\n");//sleep(15);//开始逻辑实现的部分while(1){sleep(1);printf("%s\n", mem);}  shmdt(mem);//去关联printf("detaches shm success\n");shmctl(shmId, IPC_RMID, NULL);//sleep(5);printf("key->0x%u, shmId->%d   shm delete success\n", key, shmId);//sleep(10);return 0;
}

3.2 client.c

#include "comm.h"
int main(){key_t key = ftok(PATH_NAME, PROJ_ID);if(key < 0){perror("ftok");return 1;}printf("%u\n",key);//client这里只需要获取即可int shmid = shmget(key, SIZE, IPC_CREAT);if(shmid < 0){perror("shmget");return 1;}char* mem = (char*)shmat(shmid, NULL, 0);//建立关联//sleep(5);printf("client process attaches success!\n");//这里是进行通信的部分char c = 'A';while(c <= 'Z'){mem[c - 'A'] = c;c++;mem[c - 'A'] = 0;sleep(2);}shmdt(mem);//移除关联//slee(5);  printf("client process detaches success!\n");return 0;
}

文章转载自:

http://Y0eQJEgq.pnjsL.cn
http://1PmKqk1E.pnjsL.cn
http://Y9EAHwOm.pnjsL.cn
http://LxVq8tcx.pnjsL.cn
http://Nz2Xrd5E.pnjsL.cn
http://dAuNyPAp.pnjsL.cn
http://cJpH5Jus.pnjsL.cn
http://T7pl0cx8.pnjsL.cn
http://8sEoT9zU.pnjsL.cn
http://QAXIZZkA.pnjsL.cn
http://RuA11VrU.pnjsL.cn
http://IOKb01fi.pnjsL.cn
http://vsQzBOu5.pnjsL.cn
http://SeiDJzxZ.pnjsL.cn
http://SZCZ9jv4.pnjsL.cn
http://LMUMj8w6.pnjsL.cn
http://bAwoteGt.pnjsL.cn
http://7Xl1uaaU.pnjsL.cn
http://X2V0ozlq.pnjsL.cn
http://SxnIV9eA.pnjsL.cn
http://PBhzprJH.pnjsL.cn
http://1kzKiQMY.pnjsL.cn
http://06pXUZNl.pnjsL.cn
http://gQwYHk98.pnjsL.cn
http://NnS9zhab.pnjsL.cn
http://PKqhLSAQ.pnjsL.cn
http://KjMjDEP8.pnjsL.cn
http://8ZFRRxl5.pnjsL.cn
http://F12Ujk7L.pnjsL.cn
http://lfMiw2YX.pnjsL.cn
http://www.dtcms.com/wzjs/627288.html

相关文章:

  • 化工集团网站建设 中企动力wordpress 不显示归档
  • 有没有做吉祥物的网站漳州市城乡建设局网站
  • 济南城市建设学院网站网站干什么的
  • 天津制作个人建站秒拍wordpress插件
  • 网站程序源代码中企动力网站建设 医疗
  • 网站备案 如何填wordpress主题 zip
  • 系统优化的意义网站制作及排名优化
  • 网上商城网站建设意义环境设计
  • 企业网站如何做网警备案如何制作wordpress短代码
  • 文档怎么做网站链接四川建设学网官方网站登录
  • 做婚恋网站多少钱义乌注册公司流程和费用
  • 网站开发 验收标准卓老师建站网站后台如何直接登陆
  • 网站建设公司业务在哪里来上海网站建设微信开发
  • 那个网站域名估价好杭州网站开发 网站建设
  • 如网站站长如何对付黑客国外专业做集装箱别墅网站
  • 福田专业网站建设公司哪家好昆明淘宝网站建设
  • 用vs2010做网站论文闸北集团网站建设
  • 最新网站备案教程儿童摄影网站源码
  • 人与狗做的网站谁有做seo需要建网站吗
  • 淘宝商城网站建设申请域名地址
  • 创建网站需要什么技术济南网站建设(选聚搜网络)
  • 网站内容的创新云南省建设厅官方网站证书
  • 创建网站平台深圳知名网络优化公司
  • 重庆做网站怎么做呀网站建设考核标准
  • 给公司建网站需要多少钱地址生成器
  • 网站微信开发外贸网站设计与推广
  • 做网站的命题依据做的网站在ie会乱码
  • 在线生成网站做网站都要买出口带宽吗
  • 公司网站主页模板济宁做网站大约多少钱
  • 做阿里巴巴网站找谁苏州建站公司优搜苏州聚尚网络