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 = ;

        void *shm = NULL;

        struct shared_use_st *shared;

        int shmid;  

       shmid = shmget((key_t), sizeof(struct shared_use_st), |IPC_CREAT);

        if(shmid == -)

        {

                fprintf(stderr, "shmget failed\n");

                exit(EXIT_FAILURE);

        }

        shm = shmat(shmid, , );

        if(shm == (void*)-)

        {  

               fprintf(stderr, "shmat failed\n");

                exit(EXIT_FAILURE);

        }  

       shared = (struct shared_use_st*)shm;

        shared->written = ;  

       while(running)

        {     

            if(shared->written != )

           {  

                       printf("You wrote: %s", shared->text);

                        sleep(rand() % );

                        shared->written = ;  

                       if(strncmp(shared->text, "end", ) == )

                                running = ;

            }    

             else

                        sleep();

        }

        if(shmdt(shm) == -)

        {

                fprintf(stderr, "shmdt failed\n");

                exit(EXIT_FAILURE);

        }

        if(shmctl(shmid, IPC_RMID, ) == -)

        {
fprintf(stderr, "shmctl(IPC_RMID) failed\n");
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 = ;

        void *shm = NULL;

        struct shared_use_st *shared = NULL;   

      char buffer[BUFSIZ + ];  

       int shmid;  

       shmid = shmget((key_t), sizeof(struct shared_use_st), |IPC_CREAT);

        if(shmid == -)

        {

                fprintf(stderr, "shmget failed\n");

                exit(EXIT_FAILURE);

        }  

       shm = shmat(shmid, (void*), );

        if(shm == (void*)-)

        {

                fprintf(stderr, "shmat failed\n");

                exit(EXIT_FAILURE);

        }

        shared = (struct shared_use_st*)shm;

        while(running)

  {

                while(shared->written == )

                {

                        sleep();

                        printf("Waiting...\n");

                }

                printf("Enter some text: ");

                fgets(buffer, BUFSIZ, stdin);

                strncpy(shared->text, buffer, TEXT_SZ);

                shared->written = ;

                if(strncmp(buffer, "end", ) == )

                        running = ;

        }   

      if(shmdt(shm) == -)

        {  

               fprintf(stderr, "shmdt failed\n");

                exit(EXIT_FAILURE);

        }

        sleep();
exit(EXIT_SUCCESS);
}

share memory的更多相关文章

  1. Share Memory By Communicating

    Share Memory By Communicating - The Go Programming Language https://golang.google.cn/doc/codewalk/sh ...

  2. Share Memory By Communicating 一等公民

    Share Memory By Communicating - The Go Programming Language https://golang.google.cn/doc/codewalk/sh ...

  3. share memory between guest and nic

    通过硬件的IOMMU,内核提供的共享内存.VFIO可以实现. REF: 1. offical DPDK API Doc, 简书有翻译版 DPDK编程指南(翻译)(一)  (二十七) 2. dpdk v ...

  4. share memory cache across multi web application

    Single instance of a MemoryCache across multiple application pools on the same server [duplicate] Yo ...

  5. How to share memory between services and user processes?

    除了必要的InitializeSecurityDescriptor和SetSecurityDescriptorDacl, 内存映射文件名必须GLOBAL开头.

  6. zabbix登陆问题:cannot allocate shared memory for collector

    问题说明:在一台zabbix被监控服务器上(64位centos6.8系统,64G内容)启动zabbix_agent,发现进程无法启动,10050端口没有起来! 启动zabbix_agent进程没有报错 ...

  7. System Services -> Memory Management -> About Memory Management

    Virtual Address Space Memory Pools Memory Performance Information Virtual Memory Functions Heap Func ...

  8. docker cgroup 技术之memory(首篇)

    测试环境centos7 ,内核版本4.20 内核使用cgroup对进程进行分组,并限制进程资源和对进程进行跟踪.内核通过名为cgroupfs类型的虚拟文件系统来提供cgroup功能接口.cgroup有 ...

  9. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

随机推荐

  1. 新手指南:DVWA-1.9全级别教程之SQL Injection

    *本文原创作者:lonehand,转载须注明来自FreeBuf.COM 目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk/),而网上的教程大多停留在旧版本,且没有针 ...

  2. [CSP-S模拟测试]:F(DP+线段树)

    题目传送门(内部题49) 输入格式 第一行四个整数$n,q,a,b$.接下来$n$行每行一个整数$p_i$. 输出格式 一行一个整数表示答案. 样例 样例输入: 10 3 3 7 样例输出: 数据范围 ...

  3. 爬虫问题之Unknown command: crawl

    出现这个问题,很大原因是爬虫没有在项目文件夹里运行,因为scrapy 这个爬虫框架封装好的一些命令,必须在框架内环境支持下才能运行 另外在环境目录下,还有很多命令,也必须在此路径环境下才能执行 可以通 ...

  4. Hexo next 添加复制粘贴代码的功能

    文章目录 广告: 自己的方式 感谢 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...

  5. canvas简单画图板

    <!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <title> ...

  6. Ubuntu下实现Nginx+Tomcat实现负载均衡

    先说一下为什么写这个文章,在性能测试过程中,我们可能会关注很多指标,比如CPU.IO.网络.磁盘等,通过这些指标大致可以判断哪个环节遇到了性能瓶颈,但是当这些指标无法判断出性能瓶颈时,我们可能就需要对 ...

  7. python 包管理工具 pip 的配置

    近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...

  8. Python最快的方式来读取大文本文件(几GB)

    我有一个大文本文件(约7 GB).我正在寻找是否存在阅读大文本文件的最快方法.我一直在阅读有关使用多种方法作为读取chunk-by-chunk以加快进程的过程. 例如,effbot建议 # File: ...

  9. java获取网页源代码并写入本地文件中

    import java.io.*; import java.net.*; public class URLDemo { public static void main(String args[]){ ...

  10. Spring Boot中普通类获取Spring容器中的Bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...