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

上海做网站培训班网站域名到期怎么回事

上海做网站培训班,网站域名到期怎么回事,百姓网二手车买卖,自学做网站的书Windows和Linux内存共享机制 引言1.Windows写操作读操作 2.Linux写操作读操作 3.Shell使用 tmux 运行 write 和 read说明 引言 在嵌入式开发领域,内存共享机制作为不同操作系统间实现高效数据交换的重要手段,尤其在对实时性和可靠性要求极高的环境中更为…

Windows和Linux内存共享机制

  • 引言
  • 1.Windows
    • 写操作
    • 读操作
  • 2.Linux
    • 写操作
    • 读操作
  • 3.Shell
      • 使用 tmux 运行 write 和 read
      • 说明


引言

在嵌入式开发领域,内存共享机制作为不同操作系统间实现高效数据交换的重要手段,尤其在对实时性和可靠性要求极高的环境中更为关键。近年来,随着ARINC 653标准的广泛应用,通过VxWorks仿真模拟器在Windows和Linux操作系统间建立内存共享机制已成为确保任务间稳定、同步运行的重要实现手段。本篇博客将深入探讨Windows和Linux各自的内存共享机制,结合ARINC 653标准在VxWorks中的实际应用,剖析其实现原理和实际使用中的关键技术,帮助读者更好地理解内存共享在跨平台环境中的应用场景与优势。

1.Windows

写操作


#include <windows.h>
#include <stdio.h>
#include <string.h>  // 用于字符串操作int main() {// 创建文件映射对象,大小为32字节HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE,    // 使用系统分页文件NULL,                    // 默认安全性PAGE_READWRITE,          // 读写权限0,                       // 最大对象大小(高位)1024,                      // 最大对象大小(低位),32字节"Local\\MySharedMemory"   // 映射对象名称);if (hMapFile == NULL) {printf("Could not create file mapping object (%d).\n", GetLastError());return 1;}// 将文件映射到进程的地址空间LPVOID pBuf = MapViewOfFile(hMapFile,              // 文件映射对象句柄FILE_MAP_ALL_ACCESS,   // 读写权限0,                     // 偏移高位0,                     // 偏移低位32                     // 映射的字节数);if (pBuf == NULL) {printf("Could not map view of file (%d).\n", GetLastError());CloseHandle(hMapFile);return 1;}// 无限循环让用户输入数据并写入共享内存char input[32];while (1) {printf("Enter message to write to shared memory (up to 31 characters): ");fgets(input, sizeof(input), stdin);  // 从用户处读取输入input[strcspn(input, "\n")] = '\0';  // 移除换行符// 将用户输入的数据写入共享内存memcpy(pBuf, input, strlen(input) + 1);  // +1 是为了复制结束符printf("Data written to shared memory: %s\n", (char*)pBuf);}// 解除内存映射UnmapViewOfFile(pBuf);// 关闭文件映射对象句柄CloseHandle(hMapFile);return 0;
}

读操作


#include <windows.h>
#include <stdio.h>int main() {// 打开现有的文件映射对象HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,   // 访问权限FALSE,                 // 不继承句柄"Local\\MySharedMemory" // 映射对象名称);if (hMapFile == NULL) {printf("Could not open file mapping object (%d).\n", GetLastError());return 1;}// 映射文件视图到进程的地址空间LPVOID pBuf = MapViewOfFile(hMapFile,              // 文件映射对象句柄FILE_MAP_ALL_ACCESS,   // 读写权限0,                     // 偏移高位0,                     // 偏移低位32                     // 映射的字节数);if (pBuf == NULL) {printf("Could not map view of file (%d).\n", GetLastError());CloseHandle(hMapFile);return 1;}// 无限循环读取共享内存的数据while (1) {printf("Data read from shared memory: %s\n", (char*)pBuf);Sleep(1000);  // 每秒读取一次}// 解除内存映射UnmapViewOfFile(pBuf);// 关闭文件映射对象句柄CloseHandle(hMapFile);return 0;
}

2.Linux

写操作


#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>int main() {// 打开或创建共享内存对象int shm_fd = shm_open("/my_shared_memory", O_CREAT | O_RDWR, 0666);if (shm_fd == -1) {perror("shm_open");return 1;}// 配置共享内存大小ftruncate(shm_fd, 1024);  // 设置大小为1024字节// 映射共享内存到进程地址空间void* ptr = mmap(0, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);if (ptr == MAP_FAILED) {perror("mmap");return 1;}// 无限循环让用户输入数据并写入共享内存char input[1024];while (1) {printf("Enter message to write to shared memory: ");fgets(input, sizeof(input), stdin);  // 从用户处读取输入input[strcspn(input, "\n")] = '\0';  // 移除换行符// 将用户输入的数据写入共享内存memcpy(ptr, input, strlen(input) + 1);  // +1 是为了复制结束符printf("Data written to shared memory: %s\n", (char*)ptr);}// 解除内存映射munmap(ptr, 1024);// 关闭共享内存对象close(shm_fd);shm_unlink("/my_shared_memory");return 0;
}

读操作


#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>int main() {// 打开现有的共享内存对象int shm_fd = shm_open("/my_shared_memory", O_RDONLY, 0666);if (shm_fd == -1) {perror("shm_open");return 1;}// 映射共享内存到进程地址空间void* ptr = mmap(0, 1024, PROT_READ, MAP_SHARED, shm_fd, 0);if (ptr == MAP_FAILED) {perror("mmap");return 1;}// 无限循环读取共享内存的数据while (1) {printf("Data read from shared memory: %s\n", (char*)ptr);// sleep(1);  // 每秒读取一次}// 解除内存映射munmap(ptr, 1024);// 关闭共享内存对象close(shm_fd);return 0;
}

3.Shell

这里的shell由于要开两个终端所以不能使用SSH会话或者处于不能使用图形化界面的终端

#!/bin/bash# 编译 read.c 和 write.c
gcc - o write write.c - lrt   #  - lrt 是在一些系统上链接实时库所需的
gcc - o read read.c - lrt# 检查编译是否成功
if [[ !- f "write" || !- f "read" ]]; then
echo "Compilation failed!"
exit 1
fi# 在新终端中运行 write 程序
gnome - terminal -- bash - c "./write; exec bash" &# 在新终端中运行 read 程序
gnome - terminal -- bash - c "./read; exec bash" &# 等待所有后台进程结束
wait

如果只是在命令行界面下运行程序,可以使用 screentmux 工具来在多个会话中运行 writeread 程序。这里是如何做到这一点的。

使用 tmux 运行 write 和 read

  1. 安装 tmux(如果尚未安装):

    sudo apt install tmux  # Debian/Ubuntu 系统
    sudo yum install tmux  # CentOS/RHEL 系统
    
  2. 创建新的 Memory_Sharing.sh 脚本
    修改 Memory_Sharing.sh 脚本以使用 tmux

    #!/bin/bash# 编译 read.c 和 write.c
    gcc -o write write.c -lrt   # -lrt 是在一些系统上链接实时库所需的
    gcc -o read read.c -lrt# 检查编译是否成功
    if [[ ! -f "write" || ! -f "read" ]]; thenecho "Compilation failed!"exit 1
    fi# 创建一个新的 tmux 会话,命名为 "memory_sharing"
    tmux new-session -d -s memory_sharing# 在第一个窗格中运行 write 程序
    tmux send-keys -t memory_sharing './write' C-m# 在新窗格中运行 read 程序
    tmux split-window -h
    tmux send-keys -t memory_sharing './read' C-m# 附加到 tmux 会话
    tmux attach-session -t memory_sharing
    

说明

  1. 创建 tmux 会话

    • tmux new-session -d -s memory_sharing 创建一个新的后台会话。
  2. 在窗格中运行程序

    • tmux send-keys -t memory_sharing './write' C-m 在第一个窗格中运行 write 程序。
    • tmux split-window -h 创建一个新的窗格,并在其中运行 read 程序。
  3. 附加到会话

    • tmux attach-session -t memory_sharing 附加到创建的 tmux 会话,可以看到两个程序的输出。

运行该脚本后,将在 tmux 中看到 writeread 程序的输出。按 Ctrl + b 然后按 c 可以创建新的窗格,按 Ctrl + b 然后按 o 切换窗格,按 Ctrl + b 然后按 d 可以分离会话。

http://www.yayakq.cn/news/739155/

相关文章:

  • 建设网站政策风险网站微信二维码悬浮
  • 网站 商城 app 建设越南语网站建设
  • 新手学做网站这本书网站推广计划渠道
  • 网站建设年度计划最新新闻事件今天国内消息
  • 网站备案 公司名称关联性成都网站建设及推广
  • 网站建设的组织机构怎么用ps制作个人网站模板下载
  • 建个免费的销售网站好天地做网站
  • 潍坊网站建设 58玫琳凯网站建设方案
  • 搜索的网站后大拇指分享数量不见了怎么样创建一个网站
  • 网站开发费入什么科目辽宁自适应网站建设公司
  • 网站建设中html5源码开源cms建站
  • 旅游网站自己怎么做WordPress连接微信 微信机器人
  • 网站制作外包价格江西省赣州市定南县
  • 深圳网站设计灵点网络品牌网站建设后备案多少钱
  • 网站不备案可以做微信小程序么家教中介网站怎么做学员引流
  • 哈尔滨建设局网站合肥哪里做网站
  • 个人免费自助建站网站永久免费网站模板
  • 搭建网站的架构南阳网站制作怎么样
  • 做网站的成本有多少果麦传媒的网站怎么做的
  • 昆山网站建设设计网络营销的常见方式有哪些
  • 吉林网站建设方案什么语言做网站
  • 网站建设一般要多钱合肥制作网站单位有哪些
  • 微网站是什么wordpress 新安装 慢
  • 如何网站wix wordpress
  • 通讯录管理网站建设网站建设国际标准
  • 甜蜜高端定制网站wordpress的seo优化
  • 网站架构需求wordpress两步验证码
  • 沧州网站建设专业的公司4000-262-泰安网络公司推荐
  • 网站网站开发成本淮安做网站需要多少钱
  • 西安农产品网站建设青岛网络工程优化