`
lobin
  • 浏览: 417922 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C: Linux C 编程 - 共享内存

 
阅读更多

共享内存

共享内存段

即shared memory segment

 

分配共享内存段

shmget

函数原型

int shmget(key_t key, size_t size, int shmflg);

 

共享内存操控

即shared memory control

 

shmctl

函数原型

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

 

共享内存操作

即shared memory operations

 

shmat

函数原型

void *shmat(int shmid, const void *shmaddr, int shmflg);

 

shmdt

函数原型

int shmdt(const void *shmaddr);

 

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

struct message
{
  int cmd;
  int uid;
  int state;
};

int main()
{
  int shmid;
  struct message *r_buf, *w_buf;

  shmid = shmget((key_t) 1, sizeof(struct message), 0666 | IPC_CREAT);
  if (shmid == -1)
  {
    printf("shmget error\n");
    return 1;
  }
  
  w_buf = (struct message *) shmat(shmid, NULL, 0);
  if (w_buf == (struct message *) -1)
  {
    printf("shmat error: for write buffer\n");
    return 1;
  }

  r_buf = (struct message *) shmat(shmid, w_buf, SHM_REMAP);
  if (r_buf == (struct message *) -1) 
  {
    printf("shmat error: for read buffer\n");
    return 1;
  }

  printf("shmaddr: %p(for write), %p(for read)\n", w_buf, r_buf);

  w_buf->cmd = 111;
  w_buf->uid = 1001011;
  w_buf->state = 2;

  printf("read: cmd=%d, uid=%d, state=%d\n", r_buf->cmd, r_buf->uid, r_buf->state);
  
  if (shmdt(w_buf)) 
  {
    printf("shmdt error: for write buffer\n");
    return 1;
  }
  
  // do not re- shmdt
  /*
  if (shmdt(r_buf)) 
  {
    printf("shmdt error: for read buffer\n");
    return 1;
  }
  */

  if (shmctl(shmid, IPC_RMID, NULL) == -1) 
  {
    printf("shmctl error\n");
    return 1;
  }
  return 0;
}

 

0
0
分享到:
评论

相关推荐

    linux下C语言编程4-使用共享内存实现进程间通信.doc

    Linux 下 C 语言编程使用共享内存实现进程间通信 共享内存是 Linux 操作系统中的一种进程间通信机制,它允许不同的进程访问同一个内存区域,从而实现进程间的数据交换。在 C 语言中,使用共享内存可以通过 shmget、...

    linux下C语言编程4-使用共享内存实现进程间通信.pdf

    linux下C语言编程4-使用共享内存实现进程间通信.pdf

    Linux下C语言应用编程(作者-杨铸)配套教学ppt

    这组资源,"Linux下C语言应用编程(作者-杨铸)配套教学ppt",提供了对Linux环境下C语言编程的深入理解和实践指导。以下是一些核心知识点的详细说明: 1. **Linux下C语言编程环境**: - `11-Linux下C语言编程环境....

    Linux操作系统实验报告

    - 掌握共享内存的概念及其在进程间通信中的应用。 - **实验内容**: - 创建共享内存段。 - 在多个进程中读写共享内存。 - 理解同步问题并学习如何解决同步问题。 #### 实验五:IPC信号量使用 - **实验目标**...

    Linux下C语言应用编程-作者-杨铸-配套ppt-源代码-教学大纲

    4. “14-进程间通信.ppt”:深入讨论信号、管道、消息队列、共享内存等进程间通信方式。 5. “15-多线程编程初步.ppt”:讲述线程的概念、创建与管理,以及线程同步和互斥锁的使用。 6. “16-网络编程.ppt”:讲解...

    Linux下C语言编程--进程通信、消息管理

    本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...

    Linux下C语言编程--线程操作

    ### Linux下C语言编程——线程操作 #### 前言:Linux下线程的创建与基础使用 在Linux环境中,线程作为一种重要的并发机制,为开发者提供了在单个进程中执行多个任务的能力。相较于进程,线程之间的切换成本更低,...

    linux下c语言编程4-使用共享内存实现进程间通信.pdf

    在Linux系统中,C语言编程实现进程间通信(IPC,Inter-Process Communication)时,共享内存是一种高效且直接的方式。共享内存允许多个进程访问同一块内存区域,从而实现在进程间的数据交换。以下是对标题“linux下...

    Linux共享内存C语言编程示例(包含一个应用的范例)

    Linux共享内存C语言编程示例(包含一个应用的范例)

    linux-c编程linux-c编程

    ### Linux-C编程重要知识点概述 #### 一、基础知识 ##### 源程序编译 - **GCC编译器**: 在Linux环境下,最常用的C语言编译器是GNU Compiler Collection (GCC)。它不仅支持C语言,还支持C++、Objective-C、Fortran...

    c语言linux系统编程入门

    ### C语言Linux系统编程入门知识点概述 #### 一、Linux下的C语言编程基础 ##### 1. 源程序的编译 - **GCC编译器**: 在Linux环境下,使用GCC(GNU Compiler Collection)作为主要的编译工具。GCC不仅支持C语言,还...

    linux系统编程_linux系统编程-中文_

    进程间通信(IPC)也是Linux系统编程的重要部分,包括管道、消息队列、共享内存、信号量和套接字等方法。了解这些机制如何协同工作,可以帮助你设计出高效的多进程和多线程程序。 最后,理解Makefile和构建系统是...

    LINUX编程白皮书 LINUX编程白皮书

    其次,书中的内容可能涉及C语言编程,因为C语言是Linux编程的主要语言。读者将学习如何使用标准C库,以及如何编写与系统接口交互的代码,如系统调用。此外,书中的章节可能还会讲解C++编程,特别是在Linux环境下的...

Global site tag (gtag.js) - Google Analytics