进程通信之共享内存

博客提及了头文件,并给出了例子,但未详细说明头文件相关具体内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件:

#include<sys/ipc.h>
#include<sys/shm.h>

例子

#include<stdio.h>
#include<sys/shm.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<string.h>
static char msg[]="你好!共享内存!";
union semun{
        int val;
        struct semid_ds *buf;
        unsigned short *array;
};
int creatsem(key_t key,int value)
{
        union semun sem;
        int semid;
        sem.val=value;
        semid=semget(key,1, IPC_CREAT);
        semctl(semid,0,SETVAL,sem);
        return semid;
}
void Sem_P(int semid)
{
        struct sembuf sem={0,-1,IPC_NOWAIT};
        semop(semid,&sem,1);
}

void Sem_V(int semid)
{
        struct sembuf sem={0,+1,IPC_NOWAIT};
        semop(semid,&sem,1);
}
void DESTROY(int semid)
{
        union semun sem;
        sem.val=0;
        semctl(semid,0,IPC_RMID,sem);
}
int main()
{
        key_t key;
        int semid,shmid;
        char i,*shms,*shmc;
        struct semid_ds buf;
        int value=0;
        char buffer[80];
        pid_t p;

        key=ftok("/home/18",'a');
        shmid=shmget(key,1024,IPC_CREAT); //创建共享1024个字节的共享内存
        semid=creatsem(key,0);


        p =fork();
        if(p>0)        //父进程
        {
                shms=(char*)shmat(shmid,0,0);  /*挂接共享内存*/
                memcpy(shms,msg,strlen(msg)+1); //复制到共享内存
                sleep(10);
                Sem_V(semid);
                shmdt(shms);                   //销毁共享内存
                DESTROY(semid);
        }
        else if(p==0)        //子进程
        {
                shmc=(char *)shmat(shmid,0,0);   //挂接共享内存
                Sem_P(semid);
                printf("共享内存的值为:%s\n",shmc);
                shmdt(shms);                //销毁共享内存
        }
        return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要绝望总会慢慢变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值