当前位置:  技术问答>linux和unix

共享内存的问题 请高手指教

    来源: 互联网  发布时间:2016-01-16

    本文导语:  extern "C" {     #include      #include      #include      #include      #include      #include      #include      #include      #include  } void usage(int argc, char** argv) {     printf("%s argumentsn", argv[0]);     prin...

extern "C" {
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
}

void usage(int argc, char** argv)
{
    printf("%s argumentsn", argv[0]);
    printf("-h             help mode.n");
    printf("-c             create shm.n");
    printf("-m    write message into shm.n");
    printf("-r             read message from shm.n");
    printf("-d             destroy shm.n");
}

typedef enum {SHM_UNKNOW = 0, SHM_CREATE, SHM_DESTROY, SHM_WRITE, SHM_READ} SHM_MODE;

#define SHM_KEY 1234
#define SHM_SIZE 1000

/**IPC_ALLOC is solaris specific
 */
#if !defined( IPC_ALLOC )
    #define IPC_ALLOC IPC_CREAT
#endif

/** create shm with SHM_KEY
 * @return shmid
 */
int shm_create();

/** open shm with SHM_KEY
 * @return shmid
 */
int shm_open();

/** destroy shm which shm key is SHM_KEY
 */
void shm_destroy(int shmid);

/** write a string into shm, the string should be teminated by null.
 */
void shm_write(int, char*);

/** read message from shm
 @param the shmid
 */
void shm_read(int shmid);

/** detach from shm
 */
void shm_close(const void* root);

int main(int argc, char** argv)
{
    SHM_MODE shm_mode = SHM_UNKNOW;
    char* message = NULL;
    int shmid = 0;

    int opt = 0 ;
    extern int optind ;
    extern char* optarg ;

    while ((opt = getopt (argc, argv, "hcrm:d")) != EOF) {
        switch (opt) {
            case 'h' :  // help mode
                usage(argc, argv);
                return 0;
            case 'c' :  //create mode
shm_mode = SHM_CREATE;
                break;
case 'd' :  //destroy mode
                shm_mode = SHM_DESTROY;
                break;
            case 'r':   //read message
                shm_mode = SHM_READ;
                break;
            case 'm':   //write message
                shm_mode = SHM_WRITE;
                message = (char*)optarg;
                break;
            default :
                usage(argc, argv);
                return -1;
        }
    }
    
    switch (shm_mode){
        case SHM_CREATE:
            shmid = shm_create();
            break;
        case SHM_DESTROY:
            shmid = shm_open();
            shm_destroy(shmid);
            break;
        case SHM_READ:
            shmid = shm_open();
            shm_read(shmid);
            break;
        case SHM_WRITE:
            shmid = shm_open();
            shm_write(shmid, message);
            break;
        default:
            usage(argc, argv);
            return -1;
    }
}

int shm_create()
{
    int shmid = shmget (SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
    if(shmid 

    
 
 

您可能感兴趣的文章:

  • 在JNI编程中创建共享库时(.C->.DLL)(vc6.0环境…………多谢高手指教!
  • 关于共享内存的问题 请高手指教
  • 共享内存入门问题,大家指教,小弟初学。谢谢
  • linux 共享内存操作概念问题————————————————(跪请指教)
  • Linux 共享内存介绍及实现代码
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 程序需要共享内存相当大,但是系统的内存有限
  • 在linux下能不能创建一个堆,然后给堆指定一块共享内存,然后各个程序用此堆来new对象来共享?
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • 不同用户user之间如何访问共享内存?
  • Unix/linux下如何监测共享内存的使用情况
  • 共享内存问题,高手们请进!!!
  • 判断共享内存中是否有数据
  • 【求助】linux下什么是共享内存,怎么查看。
  • linux下共享内存的覆盖或清空
  • 进程同时访问两个大共享内存,会失败?
  • 共享内存和信号灯同步问题
  • 为什么不将数据直接写入共享内存?
  • aix 的开个共享内存的问题
  • linux下共享内存 函数shmat()的使用!
  • 请详细介绍一下共享内存机制~~
  • 初学者关于共享内存的几个问题-->
  • 文件描述符的限制?(共享内存)
  • 在语言中,什么是共享内存,怎样使用,举例?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于共享存储段的使用,求助高手
  • 高手们救命啊!怎么在SUSE Linux下共享Eclipse开发环境?
  • 如何使用kdevelop创建动态共享库程序,请高手指点
  • 有哪位高手知道如何通过DOS的命令行访问网络中其他机器的共享目录
  • 网络编程中的共享内存问题,哪位高手可以帮忙解决啊?
  • 请教高手:关于系统共享库的升级
  • 请问高手,在SCO UNIX系统下如何编译共享连接库(*.so)
  • nfs的共享目录问题,高手请进!
  • 请教高手,一个关于共享内存的问题。
  • 请问各位高手如何在用两块网卡上网的情况下配置Internet连接并将internet共享?
  • 请问各位高手:怎么在LINUX7.3的环境下设置网络共享,局域网?
  • linux内核高手进!关于调用__fork()时0号进程的子进程才能与父进程共享PID的困惑
  • CSS属性参考手册 iis7站长之家
  • 高分求高手赐教-关于linux下进程共享TCP套接字的问题
  • 关于互斥访问共享变量的问题(菜鸟求高手)
  • 关于linux共享内存请教熟悉内核的高手
  • 关键词:◆C++类 ◆线程 ◆共享数据 ◆◆◆请有经验的高手帮忙出出主意
  • 求高手指点共享内存的问题
  • 关于共享内存的请教高手来哦
  • 关于vfork()问题,为什么其对父进程共享的变量的操作结果不是预期的?请高手指点,多谢了
  • NFS共享作业时, 在客户端只可以看到服务器端的共享目录,而看不到共享目录下的内容.?
  • 如何共享 共享库(*.so)中的变量?
  • 局域网共享问题:win2000的机器看不到linux机器的共享目录?
  • 用samba共享其它机子访问Linux共享时,机子可以进入,但要打开共享文件夹时提示“无法访问...找不到网络名。”这是什么原因呢?
  • 局域网中的红旗2.0如何共享到win98服务器的联接共享?
  • 局域网共享问题:win2000的机器看不到linux机器的共享目录?解决立即给分
  • 几个servlet共享一些数据 如我从数据库里读出一些重要的设置存入vector 让几个servlet共享 怎么做到?先谢
  • 求助linux普通用户下内存共享(系统V共享)大家进来看看啊!急!!
  • 关于中断共享的问题:ADC 与触摸屏的中断共享
  • 无法访问samba服务器中的共享文件夹
  • XP下设置与linux 本地连接的Internet共享问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3