linux使用共享内存实现进程间通信源码

简介: linux使用共享内存实现进程间通信源码
#include<stdio.h>
#include<sys/shm.h>
#include<stdlib.h>
#include<string.h>
#include<sys/ipc.h>
int main()
{
        int shmid;
        char *shmaddr;
        key_t key;
        key = ftok(".",1);//获取key的ID值
        shmid = shmget(key,1024*4,IPC_CREAT|0666);//创建共享内存
        if(shmid == -1){//测试是否创建成功,-1为创建失败
                printf("shmget no OK\n");
                exit(-1);
        }
        shmaddr = shmat(shmid,0,0);//映射
        printf("shmat ok\n");
        strcpy(shmaddr,"liuzhihao");//传递数据
        sleep(5);//睡5秒
        shmdt(shmaddr);//释放共享内存数据
        shmctl(shmid,IPC_RMID,0);删除共享内存
        printf("quit\n");//打印退出
        return 0;
}
~                                                                                                                  
~                       

读的部分

#include<stdio.h>
#include<sys/shm.h>
#include<stdlib.h>
#include<string.h>
#include<sys/ipc.h>
int main()
{
        int shmid;
        char *shmaddr;
        key_t key;
        key = ftok(".",1);//获取key的ID值
        shmid = shmget(key,1024*4,0);//创建共享内存
        if(shmid == -1){
                printf("shmget no OK\n");
                exit(-1);
        }
        shmaddr = shmat(shmid,0,0);//映射
        printf("shmat ok\n");
        printf("data:%s \n",shmaddr);//打印输出数据
        shmdt(shmaddr);//释放读取的数据
        printf("quit\n");//打印关闭
        return 0;
}
~      

写的界面显示

CLC@Embed_Learn:~/liuzhihao$ ./w

shmat ok

quit


读的界面显示

CLC@Embed_Learn:~/liuzhihao$ ./r

shmat ok

data:liuzhihao

quit


查看删除共享内存

CLC@Embed_Learn:~/liuzhihao$ ipcs -m


------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00000000 0 CLC 600 393216 2 dest

0x00000000 32769 CLC 600 393216 2 dest

0x01056453 524290 CLC 666 4096 0


CLC@Embed_Learn:~/liuzhihao$ ipcrm -m 524290

CLC@Embed_Learn:~/liuzhihao$ ipcs -m


------ Shared Memory Segments --------

key shmid owner perms bytes nattch status

0x00000000 0 CLC 600 393216 2 dest

0x00000000 32769 CLC 600 393216 2 dest

相关文章
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
2天前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
2天前
|
Linux
【linux进程间通信(一)】匿名管道和命名管道
【linux进程间通信(一)】匿名管道和命名管道
|
2天前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
|
2天前
|
算法 Linux Shell
【linux进程(二)】如何创建子进程?--fork函数深度剖析
【linux进程(二)】如何创建子进程?--fork函数深度剖析
|
2天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
3天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
6 0
|
3天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
18 1
|
3天前
|
存储 安全 Linux
Linux的学习之路:9、冯诺依曼与进程(1)
Linux的学习之路:9、冯诺依曼与进程(1)
18 0
|
1月前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1