做竞价网站要准备什么条件南昌网站seo技术厂家
2026/6/10 5:28:25 网站建设 项目流程
做竞价网站要准备什么条件,南昌网站seo技术厂家,做网站大图片,淘宝客推广网站源码共享内存一、共享内存#xff08;Shared Memory#xff09;1.1 基本概念System V提供#xff1a;UNIX操作系统的进程间通信方式特点#xff1a;效率最高的IPC方式1.2 操作流程key → 申请对象 → 映射对象 → 读写对象 → 撤销映射 → 删除对象1.3 与管道的区别特性共享内存…共享内存一、共享内存Shared Memory1.1 基本概念System V提供UNIX操作系统的进程间通信方式特点效率最高的IPC方式1.2 操作流程key → 申请对象 → 映射对象 → 读写对象 → 撤销映射 → 删除对象1.3 与管道的区别特性共享内存管道读写权限双方都可读写半双工固定读写端阻塞无读写阻塞有读写阻塞同步需搭配其他IPC信号/信号量自带同步存储内存区域字符数组特殊文件数据保留数据保持需主动清除读取后剪切1.4 相关函数接口1.4.1 生成键值ftok()#include sys/types.h #include sys/ipc.h key_t ftok(const char *pathname, int proj_id);功能通过路径和项目ID生成唯一键值参数pathname任意存在且不常改变的文件路径proj_id项目ID通常使用ASCII字符返回值成功返回键值失败返回-11.4.2 申请共享内存shmget()#include sys/ipc.h #include sys/shm.h int shmget(key_t key, size_t size, int shmflg);功能申请共享内存参数key唯一键值size申请的内存大小shmflg权限标志IPC_CREAT创建如果不存在IPC_EXCL检测是否存在权限八进制数如0666返回值成功返回shmid失败返回-11.4.3 映射共享内存shmat()void *shmat(int shmid, const void *shmaddr, int shmflg);功能将共享内存映射到进程地址空间参数shmid共享内存IDshmaddr映射地址通常为NULL由系统分配shmflg访问权限0读写SHM_RDONLY只读返回值成功返回映射地址失败返回(void*)-11.4.4 读写共享内存// 字符串操作 strcpy(shm_ptr, Hello); strcat(shm_ptr, World); // 内存操作 memcpy(shm_ptr, data, size); memset(shm_ptr, 0, size); memcmp(shm_ptr, data, size); // 直接赋值 *(int*)shm_ptr 100;1.4.5 撤销映射shmdt()int shmdt(const void *shmaddr);功能断开共享内存映射参数shmaddr映射地址返回值成功返回0失败返回-11.4.6 删除共享内存shmctl()int shmctl(int shmid, int cmd, struct shmid_ds *buf);功能控制共享内存参数shmid共享内存IDcmd控制命令IPC_RMID删除共享内存buf通常为NULL返回值成功返回0失败返回-11.5 示例代码#include stdio.h #include stdlib.h #include string.h #include sys/ipc.h #include sys/shm.h #include sys/types.h #include unistd.h #define SHM_SIZE 1024 int main() { // 1. 生成键值 key_t key ftok(/tmp, A); if (key -1) { perror(ftok); exit(1); } // 2. 申请共享内存 int shmid shmget(key, SHM_SIZE, IPC_CREAT | 0666); if (shmid -1) { perror(shmget); exit(1); } // 3. 映射共享内存 char *shm_ptr (char*)shmat(shmid, NULL, 0); if (shm_ptr (void*)-1) { perror(shmat); exit(1); } // 4. 读写共享内存 sprintf(shm_ptr, Hello from PID: %d, getpid()); printf(Write to shm: %s\n, shm_ptr); sleep(2); // 等待其他进程读取 // 5. 撤销映射 if (shmdt(shm_ptr) -1) { perror(shmdt); } // 6. 删除共享内存通常由最后一个进程执行 if (shmctl(shmid, IPC_RMID, NULL) -1) { perror(shmctl); } return 0; }1.6 命令工具# 查看所有IPC对象 ipcs -a # 查看共享内存 ipcs -m # 删除共享内存 ipcrm -m shmid # 查看进程 ps aux | grep a.out1.7 共享内存特性验证数据存储方式拷贝不是剪切多次读写会覆盖原有数据无偏移时同步问题需要配合其他IPC机制

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询