LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 929|回复: 5

求助 关于创建共享内存的一题

[复制链接]
发表于 2006-11-2 14:49:23 | 显示全部楼层 |阅读模式
题目:
建立共享内存
共享内存大小:64个char
通过给程序带参数对共享内存进行操作
例如: 程序名 oo
oo c 建立共享内存
oo r 显示共享内存内容
oo w 字符串 将制定字符串写入共享内存
oo d 删除共享内存

我是个初学者,谁能帮帮我??不胜感激
发表于 2006-11-2 15:05:39 | 显示全部楼层
LINUX程序设计 电子书 GOOGLE
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-3 10:43:43 | 显示全部楼层
谁帮帮我啊~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-7 11:04:16 | 显示全部楼层
上去 就没人帮下吗??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-7 15:16:05 | 显示全部楼层
#include <sys/types.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int main (int argc,char *argv[])
{
        int shm_id;
        key_t key;
        int size;
        char *shm_addr,*head,*ptr,data[64],*str;
       
        size=sizeof (char) * 64;
        switch (*argv[1])
        {
                case 'c':
                                        key = ftok("/work/oo",0);
                                        shm_id = shmget (key,size,IPC_CREAT|0660);
                                        if (shm_id==-1)
                                        {
                                                return (-1);
                                        }
                                        else
                                            printf ("the shm_id is %d\n",shm_id);
                                        break;
                case 'r':
                                       
                                       
                                        printf ("%s\n",data);
                                       
                                        break;
                case 'w':
                                       
                                        shm_addr = shmat (shm_id,0,0);
                                        shm_addr = data;
                                        while(*argv[2]!='\0')
                                        {
                                                *shm_addr = *argv[2];
                                                shm_addr++;
                                                argv[2]++;
                                        }
                                       
                                        printf("%s\n",data);
                                        break;
                case 'd':
                                        shmctl(shm_id,IPC_RMID,0);
                                        break;
                default : printf("error\n");
        }       
}


我自己写的,为什么字符串存不入共享内存中呢??高手解答下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-7 15:16:09 | 显示全部楼层
#include <sys/types.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int main (int argc,char *argv[])
{
        int shm_id;
        key_t key;
        int size;
        char *shm_addr,*head,*ptr,data[64],*str;
       
        size=sizeof (char) * 64;
        switch (*argv[1])
        {
                case 'c':
                                        key = ftok("/work/oo",0);
                                        shm_id = shmget (key,size,IPC_CREAT|0660);
                                        if (shm_id==-1)
                                        {
                                                return (-1);
                                        }
                                        else
                                            printf ("the shm_id is %d\n",shm_id);
                                        break;
                case 'r':
                                       
                                       
                                        printf ("%s\n",data);
                                       
                                        break;
                case 'w':
                                       
                                        shm_addr = shmat (shm_id,0,0);
                                        shm_addr = data;
                                        while(*argv[2]!='\0')
                                        {
                                                *shm_addr = *argv[2];
                                                shm_addr++;
                                                argv[2]++;
                                        }
                                       
                                        printf("%s\n",data);
                                        break;
                case 'd':
                                        shmctl(shm_id,IPC_RMID,0);
                                        break;
                default : printf("error\n");
        }       
}


我自己写的,为什么字符串存不入共享内存中呢??高手解答下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表