zoukankan      html  css  js  c++  java
  • 共享内存实例

    源码

    书上关于进程间通过共享内存实现通信的例子。

    遇到了问题

    操作过程中,一直提示 shmat error, 很纳闷。

    解决

    调试了很长时间,突然想起shmat会将错误原因存于error中,所以在源代码中加了一句
    printf("%s ", sys_errlist[errno]);
    运行结果显示
    Permission denied.
    原来是没有权限,运行时 加上 sudo , OK。解决.

    代码如下

    m1.c

    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    
    #define BUF_SIZE 1024
    #define MYKEY 24
    
    int main(int argc, char *argv[]) {
        int shmid;
        char *shmptr;
        
        if((shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)) == -1) {
            fprintf(stderr, "shmget error!
    ");
            exit(1);
        }
    
        printf("%d
    ", shmid);
    
        if((shmptr=shmat(shmid, 0, 0)) == (void *)-1) {
            printf("%s
    ", sys_errlist[errno]);
            exit(1);
        }
    
        while(1) {
            printf("string:%s
    ", shmptr);
            putchar('
    ');
            sleep(2);
        }
        
        exit(0);
    }
    View Code

      

    m2.c

    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    
    #define BUF_SIZE 1024
    #define MYKEY 24
    
    int main(int argc, char *argv[]) {
        int shmid;
        char *shmptr;
    
        if((shmid=shmget(MYKEY, BUF_SIZE, IPC_CREAT)) == -1) {
            fprintf(stderr, "shmget ERROR!
    ");
            exit(1);
        }
    
        if((shmptr=shmat(shmid, 0, 0)) == (void *)-1) {
            fprintf(stderr, "shmat error!
    ");
            printf("%s
    ", sys_errlist[errno]);
            exit(1);
        }
    
        while(1) {
            printf("input string:
    ");
            scanf("%s", shmptr);
        }
    
        exit(0);
    }
    View Code
  • 相关阅读:
    支持向量机(二)
    kafka partiton迁移方法与原理
    park和unpark
    Replicated State Machine和WAL
    thrift源码分析
    thrift使用和源码分析
    kafka源码环境搭建
    kafka指定partiton生产
    gradle构建scala
    kafka consumer代码梳理
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3274944.html
Copyright © 2011-2022 走看看