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

著名的个人网站金融 网站 源码

著名的个人网站,金融 网站 源码,罗湖网站建设报价,建设项目试运行备案申请网站目录 一、shmget/shmctl/shmat/shmdt函数1、shmget2、shmctl3、shmat4、shmdt5、补充#xff1a;ftok函数6、示例代码 二、shm_open/shm_unlink函数1、shm_open2、shm_unlink3、示例代码 三、课外阅读 一、shmget/shmctl/shmat/shmdt函数 shm_xx系列函数是用于操作共享内存的一… 目录 一、shmget/shmctl/shmat/shmdt函数1、shmget2、shmctl3、shmat4、shmdt5、补充ftok函数6、示例代码 二、shm_open/shm_unlink函数1、shm_open2、shm_unlink3、示例代码 三、课外阅读 一、shmget/shmctl/shmat/shmdt函数 shm_xx系列函数是用于操作共享内存的一组函数它们通常包括shmget、shmctl、shmat和shmdt。下面对这些函数进行详细解释 1、shmget 功能创建一个新的共享内存段或获取一个已经存在的共享内存段的标识符。原型int shmget(key_t key, size_t size, int shmflg)参数 key用于识别共享内存段的键值通常使用 ftok 函数生成。size共享内存段的大小。单位是字节。shmflg打开标志用于指定操作的方式比如创建共享内存段、获取共享内存标识符等。 返回值成功时返回共享内存段的标识符非负整数失败时返回-1。 shmget 函数是用于创建共享内存段、获取共享内存标识符或者访问一个已存在的共享内存段的函数其声明如下 shmget 函数的主要功能包括 如果指定的 key 对应的共享内存段不存在并且设置了创建标志(IPC_CREAT)则会创建一个新的共享内存段大小为 size 字节。如果指定的 key 对应的共享内存段存在则会返回共享内存标识符。如果不希望创建共享内存段可以不设置 IPC_CREAT 标志。此时若指定的 key 对应的共享内存段不存在shmget 函数将会返回错误。 shmget 函数的返回值是共享内存标识符shmid用于后续对共享内存段的访问操作比如连接共享内存、获得共享内存的地址等。 在使用 shmget 函数时需要注意确保对共享内存的大小和权限的设置避免潜在的问题比如内存溢出或者权限不足等。同时需要根据具体需求合理设置 shmflg 参数确保对共享内存的访问操作符合预期。 2、shmctl 功能用于控制共享内存段。原型int shmctl(int shmid, int cmd, struct shmid_ds *buf)参数 shmid是共享内存标识符是由 shmget 函数返回的。cmd是控制命令用于指定对共享内存的具体操作比如删除共享内存段、获取共享内存信息等。buf是指向 shmid_ds 结构体的指针用于传递或者获取共享内存的信息。 返回值成功时返回0失败时返回-1。 shmctl 函数是用于控制共享内存段的操作函数主要用于对共享内存段进行控制操作比如删除、获取信息等其声明如下 shmctl 函数的主要功能包括 获取共享内存段的信息比如共享内存大小、关联进程数等。控制共享内存段的权限比如修改共享内存的权限。删除共享内存段。 cmd 参数可以取以下值之一 IPC_STAT获取共享内存的状态信息并将其存储在 buf 指向的结构体中。IPC_SET设置共享内存的状态信息更新共享内存的权限等。IPC_RMID删除共享内存段释放资源。 需要注意的是在使用 shmctl 函数时要根据具体需求选择合适的控制命令并确保传入正确的参数以免出现意外的错误。同时删除共享内存段时需要注意确保所有关联进程已经分离了共享内存段否则删除操作可能会失败。 3、shmat 功能将共享内存段连接到调用进程的地址空间。原型void *shmat(int shmid, const void *shmaddr, int shmflg)参数 shmid是共享内存标识符是由 shmget 函数返回的。shmaddr是一个指针用于指定将共享内存段映射到进程地址空间的地址通常设为 NULL。shmflg参数用于指定连接共享内存段的标志通常可以设置为 0。 返回值成功时返回指向共享内存段起始地址的指针失败时返回-1。 shmat 函数的主要作用是将共享内存段连接到当前进程的地址空间实现进程对共享内存段的访问。连接成功后shmat 函数将返回一个指向共享内存段起始地址的指针进程可以通过该指针来访问共享内存段中的数据。 一般情况下shmaddr 参数设为 NULL由系统自动选择合适的地址来映射共享内存段到进程地址空间中。shmflg 参数通常设为 0表示默认的连接标志除非有特殊需求一般不需要修改。 需要注意的是在使用 shmat 函数时要确保传入正确的共享内存标识符 shmid避免出现连接错误。另外在使用完共享内存后要及时调用 shmdt 函数将共享内存段从当前进程地址空间中分离避免资源泄漏。 4、shmdt 功能将共享内存段从调用进程的地址空间中分离。原型int shmdt(const void *shmaddr)参数 shmaddr是共享内存段连接到进程地址空间的起始地址通常是由 shmat 函数返回的。 返回值成功时返回0失败时返回-1。 shmdt 函数的主要作用是断开当前进程与共享内存段的连接使得进程无法再访问共享内存段中的数据。调用 shmdt 函数后共享内存段仍然存在但当前进程无法再对其进行操作。 在使用 shmdt 函数时需要传入正确的共享内存段起始地址 shmaddr确保将正确的共享内存段从当前进程中分离。另外需要注意的是分离共享内存段后如果没有其他进程仍然连接着该共享内存段系统会释放该共享内存段从而释放相关资源。 在使用共享内存时需要注意合理地管理共享内存的连接和分离避免出现资源泄漏或者错误的操作。 ftok 函数是一个用于生成一个 System V IPCInter-Process Communication进程间通信键值的函数其声明如下 5、补充ftok函数 key_t ftok(const char *pathname, int proj_id);pathname 参数是一个指向字符串的指针用于指定一个已经存在的文件的路径名。proj_id 参数是一个用户定义的整数可以是 0 到 255 的范围内的任意值。 ftok 函数会根据指定的 pathname 和 proj_id 生成一个唯一的键值用于创建或访问 System V IPC 的资源如共享内存、信号量和消息队列。 实际上ftok 函数根据 pathname 参数对应文件的 inode 号和 proj_id 参数生成一个 32 位的键值最高 8 位存放 proj_id低 24 位存放 pathname 对应文件的 inode 号的后 24 位。这样可以保证相同的 pathname 和 proj_id 参数生成相同的键值。 需要注意的是在使用 ftok 函数时要确保 pathname 参数是一个已经存在的文件的路径名否则会导致生成的键值不唯一。另外proj_id 参数的取值范围是 0 到 255超出这个范围可能导致键值重复。 综上所述ftok 函数是用于生成 System V IPC 键值的一个实用工具函数可以通过指定文件路径和项目标识来确保生成唯一的键值用于进程间通信的各种资源的创建和访问。 6、示例代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/ipc.h #include sys/shm.h#define SHM_SIZE 1024 // 共享内存大小int main() {key_t key ftok(shmfile, R); // 创建共享内存的键值int shmid;// 创建共享内存段shmid shmget(key, SHM_SIZE, IPC_CREAT | 0666);if (shmid -1) {perror(shmget);exit(1);}// 连接共享内存段char *shmaddr (char *)shmat(shmid, NULL, 0);if (shmaddr (char *)-1) {perror(shmat);exit(1);}// 写入数据到共享内存strcpy(shmaddr, Hello, Shared Memory!);printf(Data written to shared memory: %s\n, shmaddr);// 分离共享内存段if (shmdt(shmaddr) -1) {perror(shmdt);exit(1);}// 删除共享内存段if (shmctl(shmid, IPC_RMID, 0) -1) {perror(shmctl);exit(1);}return 0; }二、shm_open/shm_unlink函数 1、shm_open shm_open 是 POSIX 标准中定义的用于创建或打开共享内存对象的函数。与传统的 shmget 函数类似shm_open 提供了一种不同的方式来管理共享内存使用文件描述符来标识共享内存对象。shm_open 的原型如下 int shm_open(const char *name, int oflag, mode_t mode);name 参数是一个指向表示共享内存对象名称的字符串的指针。共享内存对象通过名称在文件系统中标识。oflag 参数指定了打开共享内存对象时的操作标志可以是一组位或运算的标志比如 O_CREAT创建共享内存对象, O_RDWR可读写方式打开等。mode 参数指定了新创建的共享内存对象的权限标志通常与 open 系统调用中使用的 mode 参数一样。 使用 shm_open 函数创建或打开共享内存对象后可以通过标准的文件 I/O 函数如 read 和 write对共享内存进行读写操作。共享内存对象在文件系统中以名字为标识不同进程可以通过相同的名字打开同一个共享内存对象从而实现进程间通信。 在使用 shm_open 函数时需要注意以下几点 共享内存对象的名称必须在当前系统中是唯一的以避免命名冲突。在打开共享内存对象后应谨慎进行读写操作避免发生竞争条件和数据一致性问题。当不再需要共享内存对象时应当使用 shm_unlink 函数来释放该共享内存对象以防止资源泄漏。 总的来说shm_open 提供了一种基于文件描述符的共享内存对象管理方式使得共享内存在不同进程之间的使用更加灵活和方便。 2、shm_unlink shm_unlink 是一个函数用于删除由 shm_open 创建的共享内存对象的名称。在 POSIX 标准中共享内存对象在文件系统中以名称标识使用 shm_open 打开该共享内存对象后可以通过 shm_unlink 函数删除该对象的名字但不会立即释放共享内存本身。只有在所有进程都关闭该共享内存对象的文件描述符或调用 shm_unlink 之后共享内存对象才会被彻底删除。shm_unlink 的原型如下 int shm_unlink(const char *name);name 参数是一个指向表示要删除的共享内存对象名称的字符串的指针。 使用 shm_unlink 函数可以确保在不再需要共享内存对象时清理对象的名称这样可以避免其他进程再次通过该名称打开共享内存对象。但需要注意的是即使调用了 shm_unlink只有当所有打开该共享内存对象的文件描述符都关闭共享内存对象才会被系统真正删除。 一般来说在不再需要使用共享内存对象时建议及时调用 shm_unlink以便及时释放已不需要的资源。这样可以更好地管理共享内存避免资源泄漏和冗余共享内存对象的存在。 3、示例代码 以下是一个简单的示例代码展示了如何使用 shm_open 和 shm_unlink 函数来创建和删除共享内存对象的名称。 #include stdio.h #include stdlib.h #include unistd.h #include sys/mman.h #include sys/stat.h #include fcntl.h #include string.h#define SHM_NAME /my_shared_memory #define SHM_SIZE 1024int main() {const char *data Hello, this is shared memory demo!;// Create or open a shared memory objectint shm_fd shm_open(SHM_NAME, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);ftruncate(shm_fd, SHM_SIZE);// Map the shared memory object into memorychar *shm_ptr mmap(0, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);// Write data to the shared memorystrcpy(shm_ptr, data);printf(Data written to shared memory: %s\n, shm_ptr);// Unmap the shared memorymunmap(shm_ptr, SHM_SIZE);// Close the shared memory objectclose(shm_fd);// Unlink the shared memory object nameshm_unlink(SHM_NAME);return 0; }在这个示例代码中首先使用 shm_open 函数创建或打开一个共享内存对象并指定名称为 /my_shared_memory。然后使用 ftruncate 函数设置共享内存对象的大小为 SHM_SIZE 字节。 接着使用 mmap 函数将共享内存对象映射到当前进程的内存空间中使得可以对其进行读写操作。将数据写入共享内存后通过 munmap 函数解除共享内存的映射并通过 close 函数关闭共享内存对象的文件描述符。 最后调用 shm_unlink 函数删除共享内存的名称这样其他进程就无法再使用该名称打开共享内存对象。 三、课外阅读 推荐阅读进程间通信–共享内存篇 欢迎大家指导和交流如果我有任何错误或遗漏请立即指正我愿意学习改进。期待与大家一起进步
http://www.zqtcl.cn/news/275630/

相关文章:

  • 微信网站游戏网络规划设计师可以挂证吗
  • 有个做特价的购物网站网站建设与维护题库及答案
  • 长沙网站优化价格创意设计师个人网站
  • 滨河网站建设南京免费发布信息网站
  • 蓝色系列的网站邓砚谷电子商务网站建设
  • 德阳市住房和城乡建设局网站首页一个服务器可以建多少个网站
  • 建一个电商网站多少钱一起做网店货源app
  • 做网站用lunx代理记账 营销型网站
  • 凡客做网站怎么样WordPress分类目录 前100篇
  • 腾讯wordpress 建站教程本地的上海网站建设公司
  • 深圳市南山区住房和建设局官方网站上海专业网站建设公司站霸网络
  • 建网站的8个详细步骤网站集约化建设讲话
  • 建设局哪个网站查证南京注册公司多少钱
  • 免费的网站制作郑州中森网站建设
  • 网站关键词搜不到了濮阳网络教育
  • 推荐股票的好网站如何做好网站宣传
  • 免费网站模板网大型网络游戏
  • 网站开发语言数据库有几种广东省建设厅官网查询
  • 建新建设集团有限公司网站土巴兔装修公司电话
  • 百度网站审核期时间wordpress如何实现收费会员制
  • delphi 2010 网站开发wordpress 变装小说
  • asp.net电子商务网站前台模板企业所得税优惠政策2021年小微企业
  • 成都网站建设 lkcms深圳做网站哪个公司最好
  • 网站降权处理关于网站建设心得体会
  • 互联网站点与wordpress集成软件
  • 网站页面图片布局如何设计最新热点新闻事件
  • 学网站建设难四会市城乡规划建设局网站
  • 网站源码分享网html代码入门基础
  • 农产品网站开发方案陕西建设网成绩查询
  • 网站效益分析iis添加网站ip地址