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

两个程序共享内存的问题

    来源: 互联网  发布时间:2016-07-10

    本文导语:  以下程序,两个程序通过共享内存通信,set.c是通过终端输入一个数字,然后通知get.c,get.c在终端显示出来,现在的问 题是,set后get.c无法显示数字,如果换成字符串则可以,不知道什么问题,高手帮忙看看! /* se...

以下程序,两个程序通过共享内存通信,set.c是通过终端输入一个数字,然后通知get.c,get.c在终端显示出来,现在的问
题是,set后get.c无法显示数字,如果换成字符串则可以,不知道什么问题,高手帮忙看看!


/* set.c*/
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#include "shm_com.h"

int main()
{
    int running = 1;
    void *shared_memory = (void *)0;
    struct shared_use_at *shared_stuff;
    char buffer[BUFSIZ];
    int shmid;
int command;

    shmid = shmget((key_t)1234, sizeof(struct shared_use_at), 0666 | IPC_CREAT);

    if(shmid == -1)
    {
        fprintf(stderr, "shmget failedn");
        exit(EXIT_FAILURE);
    }

    shared_memory = shmat(shmid, (void *)0, 0);
    if(shared_memory == (void *)-1)
    {
        fprintf(stderr, "shmat failedn");
        exit(EXIT_FAILURE);
    }

    printf("Memory attached at %Xn", (int)shared_memory);

    shared_stuff = (struct shared_use_at *)shared_memory;

    while(running)
    {
        while(shared_stuff->written_by_you == 1)
        {
            sleep(1);
            printf("waiting for client...n");
        }

        printf("Enter a number: ");
scanf("%dn", &command);
shared_stuff->power = command;
  /*      fgets(buffer, BUFSIZ, stdin);

        strncpy(shared_stuff->some_text, buffer, TEXT_SZ);*/
        
        shared_stuff->written_by_you = 1;

        if(command == 10)
        {
            running = 0;
        }
    }

    if(shmdt(shared_memory) == -1)
    {
        fprintf(stderr, "shmdt failedn");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}


/***************** get.c **************************/
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include "shm_com.h"

int main()
{
    int running = 1;
    void *shared_memory = (void *)0;
    struct shared_use_at *shared_stuff;
    int shmid;

    srand((unsigned int) getpid());

    shmid = shmget((key_t)1234, sizeof(struct shared_use_at), 0666|IPC_CREAT);

    if(shmid == -1)
    {
        fprintf(stderr, "shmget failedn");
        exit(EXIT_FAILURE);
    }


    shared_memory = shmat(shmid, (void *)0, 0);
    if(shared_memory == (void *)-1)
    {
        fprintf(stderr, "shmat failedn");
        exit(EXIT_FAILURE);
    }

    printf("Memory attached at %Xn", (int)shared_memory);


    shared_stuff = (struct shared_use_at *)shared_memory;
    shared_stuff->written_by_you = 0;
    while(running)
    {
        if(shared_stuff->written_by_you)
        {
            printf("You wrote: %s", shared_stuff->power);
            sleep(rand() % 4);
            shared_stuff->written_by_you = 0;
            if(shared_stuff->power==0)
            {
                running = 0;
            }
        }
    }


    if(shmdt(shared_memory)==-1)
    {
        fprintf(stderr, "shmdt failedn");
        exit(EXIT_FAILURE);
    }

    if(shmctl(shmid, IPC_RMID, 0)==-1)
    {
        fprintf(stderr, "shmctl(IPC_RMID) failedn");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}

|
          printf("You wrote: %s", shared_stuff->power); 

power是整数,为什么用%s ?

    
 
 

您可能感兴趣的文章:

  • 主进程有两个线程,fork子进程后复制主进程两个线程的内存么?
  • 进程同时访问两个大共享内存,会失败?
  • 两个不同的进程对共享内存中的变量读写,一般通过什么方式同步方便?
  • 内存问题及 top 命令,郁闷了两个多月了.高手请帮忙.
  • 如何使用共享内存让两个子进程写入同一个链表?
  • 听说,初学JAVA有两个开源程序是必看的,请问是哪两个。在那里下载?
  • 运行了2个java程序,怎样区分两个程序?
  • 请问两个毫不相关的程序,怎样实现通信
  • 请问qt启用两个QThread线程可不可以运行不同的程序
  • 急!在LINUX上有什么工具可以测试两个程序的效率
  • 两个程序同时打开文件问题?
  • 关于两个网卡的网卡驱动程序编写的问题?
  • 怎么把两个程序加到自动启动里?
  • !!!急问: 两个程序,读取相同文件的问题??
  • 请问ncurses与curses有区别吗?有什么区别?在这两个库下编写的程序通用吗?
  • 看看这两个小程序
  • 有两个USB键盘怎么用自己写的USB键盘驱动程序只替换其中一个驱动?
  • 求一个很简单的脚本程序:删除一个文件中两个标志中的一段文字
  • 两个驱动程序能互相访问么?
  • 一个程序两个结果,请高手分析原因
  • linux下,要实现两个程序共享同一个串口,该怎么设置参数?谢谢
  • 如何实现本地的两个JAVA程序同时访问一个链表,从而共享数据资源,是否需要使用API
  • 这个socket程序的服务进程开始服务后,为什么总是两个进程?
  • 傻傻得问,如果两个设备共享一个中断线,中断响应程序怎么区分?
  • 自编译的helloworld程序不能同时在两个linux系统中执行????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ MultiMaps 成员 swap():交换两个multimaps
  • 急!有两个char buf[]里面是两个日期(2004-08-02),怎样判断两个日期之间的天数?(只能用标准C)
  • C++ Lists(链表) 成员 merge():合并两个list
  • 一个Statement不能同时打开两个ResultSet?为了同时打开两个,可以考虑建立两个Statement?甚至两个Connection?
  • C++ Lists(链表) 成员 swap():交换两个list
  • Keepalived 能配两个虚拟ip吗,匹配两个数据库实例?
  • C++ Maps 成员 swap():交换两个map
  • 可以有其他两个类的实例同时调用一个java实例的两个方法吗?
  • C++ Vectors 成员 swap():交换两个Vector
  • 两个域名,两个端口,一个服务器……
  • C++ Lists(链表) 成员 splice():合并两个list
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • C++ Strings(字符串) 成员 swap():交换两个字符串的内容
  • 下载了jbuilder5,是rar格式的,解开后有两个文件,一个是rsc-jb5.bin,一个是rsc-jb5.cue,据说这两个文件是刻光盘的,请问谁知道怎么刻?不会用这两个文件直接安装吧?谢谢!
  • C++ Strings(字符串) 成员 compare():比较两个字符串
  • 基础问题,刚学的!请教,两个日期格式变量,我要求两个日期之间的天数,怎么求?
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 我机器上安装了linux和win2000两个系统,请问如何在两个系统之间切换。
  • linux字符模式下怎样可以运行两个任务(开两个终端)
  • 由同一个服务端创建两个线程分别向两个客户端同时发送不同的数据···
  • 一个进程创建了两个线程,如何使得当任何一个线程(比如线程a)结束时,同时也结束线程b,也就是使两个线程一起死掉,怎么办呢?


  • 站内导航:


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

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

    浙ICP备11055608号-3