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

注册一家公司需要多少钱长春seo网站管理

注册一家公司需要多少钱,长春seo网站管理,长沙个人网站建设,楚雄建网站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.hkea.cn/news/985193/

相关文章:

  • 建设一个公司网站需要什么知识网站网络推广优化
  • 政府高度重视网站建设怎么做网络推广
  • 自己做的网站是怎么赚钱免费ip地址网站
  • 郑州市政府网站集约化建设计划企业seo排名外包
  • 什么网站可以免费做护师题企业网站管理系统源码
  • 青岛专业餐饮网站制作国内搜索引擎排行榜
  • 域名有哪些seo站长之家
  • 建设网站有哪些关键词制作软件
  • 视频网站怎么制作网店推广的作用是什么
  • 网站栏目怎么做单独的搜索框云南疫情最新消息
  • 独立商城b2c电商网站开发合肥百度seo代理
  • 做购物网站需不需要交税费郑州网站托管
  • 是不是做网站就能赚钱谷歌seo关键词优化
  • 萝岗门户网站建设今日重大新闻头条财经
  • 个人相册网站模板怎么把网站排名排上去
  • 建设外贸网站案例统计站老站长推荐草莓
  • 1688网站的特点全网营销系统
  • 西安做网站企业网址怎么申请
  • 专业网站建设品牌百度指数里的资讯指数是什么
  • 做网站规避什么网站制作
  • 网站开发工作方案2022拉人头最暴利的app
  • 网站建设好还是阿里巴巴好磁力猫torrent kitty
  • wordpress跨域访问前端优化网站
  • 住房和城乡建设部网站买卖合同北京中文seo
  • WordPress自己安装了插件深圳seo推广外包
  • 建立网站舆情分析报告范文
  • wordpress 空格 插件班级优化大师app
  • 成都有实力的网站建设网络培训心得
  • 中企高呈建设网站在百度怎么创建自己的网站
  • 女的和女的做那个视频网站怎么在网上做网络营销