文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>进程通信----共享内存

进程通信----共享内存

时间:2010-08-25  来源:huazaicola

进程通信----共享内存 父子进程之间为例: 流程: 1. 创建共享内存 2. 创建子进程 3. 父进程中  映射内存  向内存写数据strncpy  wait同步子进程 4. 子进程中  映射内存  等待父进程写入sleep  操作内存(可读)  

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define PERM S_IRUSR|S_IWUSR

int main(int argc, char **argv)
{
    int shmid;
    char *f_addr, *c_addr;

    if(argc != 2)
    {
        printf("Usage: ./shm ni hao \n");
        exit(1);
    }
    if((shmid = shmget(IPC_PRIVATE, 1024, PERM)) < 0) // (()())()

    {
        printf("shmget error:%s\n", strerror(errno));
        exit(1);
    }
    printf("shmget ok!\n");
/*    if( fork() < 0)
    {
        printf("fork error:%s\n", strerror(errno));
        exit(1);
    }*/
    if(fork())
    {
        printf("father process...\n");
        f_addr = shmat(shmid, 0, 0);
        memset(f_addr, '\0', 1024);
        strncpy(f_addr, argv[1],1024);
        printf("father exit!\n");
        wait(NULL);
//        sleep(3);


    }
    else
    {
        sleep(1);
        printf("child process...\n");
        c_addr = shmat(shmid, 0, 0);
        printf("client get:%s\n", c_addr);
    }
}


易错点:

1.int main(int argc, char **argv)

    主函数**argv

2.if((shmid = shmget(IPC_PRIVATE, 1024, PERM)) < 0) // (()())()

先将赋值括起来,然后与0比较, 注意内存属性的描述

3. memset(f_addr, '\0', 1024);

    映射之后,写之前要初始化内存。

4.wait(NULL);   

先执行的进程要等待后执行的进程!          (PS:字体颜色较乱,没法改,我不会操作)

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载