共享内存
共享内存段
即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语言编程一站式学习知识点概览 #### 标题:Linux C语言编程一站式学习--pdf完整版 - **核心内容**:本书旨在为初学者和有一定基础的学习者提供一个全面且系统的C语言编程学习资源,特别强调在Linux环境...
Linux共享内存C语言编程示例(包含一个应用的范例)
### Linux下C语言编程入门知识点概览 #### 一、基础知识 - **源程序编译** - 在Linux环境中,通常使用`gcc`作为C语言的编译器。 - 示例程序`hello.c`编译命令:`gcc -o hello hello.c`。 - `gcc`常见选项解释: ...
### C语言Linux系统编程入门知识点概述 #### 一、Linux下的C语言编程基础 ##### 1. 源程序的编译 - **GCC编译器**: 在Linux环境下,使用GCC(GNU Compiler Collection)作为主要的编译工具。GCC不仅支持C语言,还...
进程间通信(IPC)也是Linux系统编程的重要部分,包括管道、消息队列、共享内存、信号量和套接字等方法。了解这些机制如何协同工作,可以帮助你设计出高效的多进程和多线程程序。 最后,理解Makefile和构建系统是...
- **主要内容**:讨论高级进程间通信机制,如信号量、共享内存和消息队列。 - **学习目标**:掌握这些高级IPC机制的用法。 - **第15章:套接字编程** - **主要内容**:深入探讨网络编程的核心——套接字编程。 ...
其次,书中的内容可能涉及C语言编程,因为C语言是Linux编程的主要语言。读者将学习如何使用标准C库,以及如何编写与系统接口交互的代码,如系统调用。此外,书中的章节可能还会讲解C++编程,特别是在Linux环境下的...
- **方法**: 包括管道、消息队列、共享内存等。 - **用途**: 用于进程间的数据交换。 **1.4.15 临时文件** - **定义**: 仅在程序运行期间存在的文件。 - **用途**: 存储临时数据,避免占用过多磁盘空间。 **1.5 ...
- 掌握进程的概念,包括进程的创建、调度、通信机制(如管道、信号量、共享内存)以及进程间的同步与互斥问题,是深入Linux编程的关键。 2. **文件操作**: - 文件操作是任何编程语言中不可或缺的一部分。在Linux...
- **操作系统选择**: 本书选择了Slackware GNU/Linux 9.1作为示例平台,这是因为GNU/Linux系统提供了一个稳定的环境来进行C语言编程实践。 - **GCC安装**: 由于不同版本的GNU/Linux可能自带的GCC版本不同,书中建议...