一个自写的共享内存简单的例子,学习原理之用

/*
 *        shm_test.c
 *        共享内存测试程序,往一个共享内存里循环写入数据
 
*/

#include 
< sys / shm.h >
#include 
< sys / types.h >
#include 
< unistd.h >
#include 
< stdio.h >
#define  SHARED_MEME "/tmp/share"
#define  SHM_MODE 0600
#include 
< stdlib.h >
int  main( void )
{
    key_t key;
    
long shm_id;
    
int i = 0, j;
    
char *ptr;
    
char *back;
    
char name[7= "Ken Jun";
    
struct shmid_ds buff;        
    
    
if ((key = ftok(SHARED_MEME, 0)) == -1)
        printf(
"ftok error! ");
    shm_id 
= shmget(key, 512, SHM_MODE | IPC_CREAT);
    ptr 
= shmat(shm_id, 00);
    shmctl(shm_id, IPC_STAT, 
&buff);
    back 
= ptr;
    
//for (i = 0; i < buff.shm_segsz; i++)
    while(1)
    
{
        
        
if (i >= (int)buff.shm_segsz / 7{
            ptr 
= back;
            i 
= 0;
            
continue;
        }

        printf(
"在%p内存里", ptr);
        printf(
"写入字段%d : ", i);
        
for (j = 0; j < 7; j++)
        
{
            
*ptr = name[j];
            printf(
"%c"*ptr);
            ptr
++;
        }

        printf(
" . ");
        usleep(
5000);
        i
++;
    }

    shmdt(
&shm_id);
    shmctl(shm_id, IPC_RMID, NULL);
    
return 0;    
}

/*
 *        shm_test_read.c
 *        共享内存测试程序,从一个共享内存里循环读出数据
 
*/

#include 
< sys / shm.h >
#include 
< sys / types.h >
#include 
< unistd.h >
#include 
< stdio.h >
#define  SHARED_MEME "/tmp/share"
#define  SHM_MODE 0600

int  main( void )
{
    key_t key;
    
long shm_id;
    
int i = 0, j;
    
char *ptr;
    
char name[7];
    
char *back;
    
struct shmid_ds buff;
    
if ((key = ftok(SHARED_MEME, 0)) == -1)
        printf(
"ftok error! ");
    shm_id 
= shmget(key, 512, SHM_MODE | IPC_CREAT);        
    ptr 
= shmat(shm_id, 00);
    shmctl(shm_id, IPC_STAT, 
&buff);
    back 
= ptr;
    
//for (i = 0; i < buff.shm_segsz; i++)
    while(1)
    
{    
        
        
if (i >= (int)buff.shm_segsz / 7{
            ptr 
= back;
            i 
= 0;
            
continue;
        }

        printf(
"从%p内存里", ptr);
        printf(
"读出字段%d : ", i);
        
for (j = 0; j < 7; j++)
        
{
            printf(
"%c"*ptr);
            ptr
++;
        }

        printf(
" . ");
        
        usleep(
5000);
        i
++;
    }

    shmdt(
&shm_id);
    
return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值