共享内存
共享内存段
即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; }
相关推荐
Linux 下 C 语言编程使用共享内存实现进程间通信 共享内存是 Linux 操作系统中的一种进程间通信机制,它允许不同的进程访问同一个内存区域,从而实现进程间的数据交换。在 C 语言中,使用共享内存可以通过 shmget、...
linux下C语言编程4-使用共享内存实现进程间通信.pdf
这组资源,"Linux下C语言应用编程(作者-杨铸)配套教学ppt",提供了对Linux环境下C语言编程的深入理解和实践指导。以下是一些核心知识点的详细说明: 1. **Linux下C语言编程环境**: - `11-Linux下C语言编程环境....
- 掌握共享内存的概念及其在进程间通信中的应用。 - **实验内容**: - 创建共享内存段。 - 在多个进程中读写共享内存。 - 理解同步问题并学习如何解决同步问题。 #### 实验五:IPC信号量使用 - **实验目标**...
4. “14-进程间通信.ppt”:深入讨论信号、管道、消息队列、共享内存等进程间通信方式。 5. “15-多线程编程初步.ppt”:讲述线程的概念、创建与管理,以及线程同步和互斥锁的使用。 6. “16-网络编程.ppt”:讲解...
本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...
### Linux下C语言编程——线程操作 #### 前言:Linux下线程的创建与基础使用 在Linux环境中,线程作为一种重要的并发机制,为开发者提供了在单个进程中执行多个任务的能力。相较于进程,线程之间的切换成本更低,...
在Linux系统中,C语言编程实现进程间通信(IPC,Inter-Process Communication)时,共享内存是一种高效且直接的方式。共享内存允许多个进程访问同一块内存区域,从而实现在进程间的数据交换。以下是对标题“linux下...
Linux共享内存C语言编程示例(包含一个应用的范例)
### C语言Linux系统编程入门知识点概述 #### 一、Linux下的C语言编程基础 ##### 1. 源程序的编译 - **GCC编译器**: 在Linux环境下,使用GCC(GNU Compiler Collection)作为主要的编译工具。GCC不仅支持C语言,还...
进程间通信(IPC)也是Linux系统编程的重要部分,包括管道、消息队列、共享内存、信号量和套接字等方法。了解这些机制如何协同工作,可以帮助你设计出高效的多进程和多线程程序。 最后,理解Makefile和构建系统是...
其次,书中的内容可能涉及C语言编程,因为C语言是Linux编程的主要语言。读者将学习如何使用标准C库,以及如何编写与系统接口交互的代码,如系统调用。此外,书中的章节可能还会讲解C++编程,特别是在Linux环境下的...
- **操作系统选择**: 本书选择了Slackware GNU/Linux 9.1作为示例平台,这是因为GNU/Linux系统提供了一个稳定的环境来进行C语言编程实践。 - **GCC安装**: 由于不同版本的GNU/Linux可能自带的GCC版本不同,书中建议...