Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 一个自写的共享内存简单的例子,学习原理之用
【标  题】:一个自写的共享内存简单的例子,学习原理之用
【关键字】:
【来  源】:http://blog.csdn.net/yhniejun/archive/2007/01/23/1491124.aspx

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

Your Ad Here
/*
 *        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;
}

Linux下C语言引用shell脚本的简单例子:【上一篇】
请高手指点 我是个大学生 今年大二 我现在学C++:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 网上创业精华经验
  • PHOTOSHOP鼠绘名模王爱萍
  • bugs的分类
  • CorelDRAW轻松绘制螺旋削皮
  • Jboss
  • 超酷的realplayer技巧
  • Dim 的陷阱
  • C/C++结构体读文件失败和内存对齐
  • 实现基于IDEA算法的加密工具(6)
  • 散花(红玫瑰)代码
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.