• share memory


    header for public argument:shmdata.h

    #define TEXT_SZ 2048
    
    struct shared_use_st
    
    {
    
            int written;
    
            char text[TEXT_SZ];
    
    };
    
    #endif

    shmread.c

    #include <unistd.h>
    
    #include <stdlib.h>
    
    #include <stdio.h>
    
    #include <sys/shm.h>
    
    #include "shmdata.h"
    
    int main()
    
    {
    
            int running = 1;
    
            void *shm = NULL;
    
            struct shared_use_st *shared;
    
            int shmid;  
    
           shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666|IPC_CREAT);
    
            if(shmid == -1)
    
            {
    
                    fprintf(stderr, "shmget failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }
    
            shm = shmat(shmid, 0, 0);
    
            if(shm == (void*)-1)
    
            {  
    
                   fprintf(stderr, "shmat failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }  
    
           shared = (struct shared_use_st*)shm;
    
            shared->written = 0;  
    
           while(running)
    
            {     
    
                if(shared->written != 0)
    
               {  
    
                           printf("You wrote: %s", shared->text);
    
                            sleep(rand() % 3);
    
                            shared->written = 0;  
    
                           if(strncmp(shared->text, "end", 3) == 0)
    
                                    running = 0;
    
                }    
    
                 else
    
                            sleep(1);
    
            }
    
            if(shmdt(shm) == -1)
    
            {
    
                    fprintf(stderr, "shmdt failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }
    
            if(shmctl(shmid, IPC_RMID, 0) == -1)
    
            {
                    fprintf(stderr, "shmctl(IPC_RMID) failed
    ");
                    exit(EXIT_FAILURE);
            }
            exit(EXIT_SUCCESS);
    }

    shmwrite.c

    #include <unistd.h>
    
    #include <stdlib.h>
    
    #include <stdio.h>
    
    #include <string.h>
    
    #include <sys/shm.h>
    
    #include "shmdata.h"
    
    int main()
    
    {
    
            int running = 1;
    
            void *shm = NULL;
    
            struct shared_use_st *shared = NULL;   
    
          char buffer[BUFSIZ + 1];  
    
           int shmid;  
    
           shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666|IPC_CREAT);
    
            if(shmid == -1)
    
            {
    
                    fprintf(stderr, "shmget failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }  
    
           shm = shmat(shmid, (void*)0, 0);
    
            if(shm == (void*)-1)
    
            {
    
                    fprintf(stderr, "shmat failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }
    
            shared = (struct shared_use_st*)shm;
    
            while(running)
    
      {
    
                    while(shared->written == 1)
    
                    {
    
                            sleep(1);
    
                            printf("Waiting...
    ");
    
                    }
    
                    printf("Enter some text: ");
    
                    fgets(buffer, BUFSIZ, stdin);
    
                    strncpy(shared->text, buffer, TEXT_SZ);
    
                    shared->written = 1;
    
                    if(strncmp(buffer, "end", 3) == 0)
    
                            running = 0;
    
            }   
    
          if(shmdt(shm) == -1)
    
            {  
    
                   fprintf(stderr, "shmdt failed
    ");
    
                    exit(EXIT_FAILURE);
    
            }
    
            sleep(2);
            exit(EXIT_SUCCESS);
    }
  • 相关阅读:
    1386. 安排电影院座位
    1123. 最深叶节点的最近公共祖先
    375. 猜数字大小 II
    未能在system.drawing中找到bitmap
    856. 括号的分数
    140. 单词拆分 II
    5909. 并行课程 III
    typora + ImgHosting (一款不会存储图片的图床实现)
    IDEA插件:search with bing、search with baidu
    多吉搜索美化
  • 原文地址:https://www.cnblogs.com/edver/p/7154598.html
Copyright © 2020-2023  润新知