`
java-mans
  • 浏览: 11414781 次
文章分类
社区版块
存档分类
最新评论

进程控制理论<三>---那些年我们一起学习linux程序设计

 
阅读更多

一.共享内存:

共享内存:是被多个进程共享的一部分物理内存。

共享内存是进程间共享数据的一种最快的方式;

一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立即看到其中的内容。

二.共享内存的实现:

共享内存的实现分为两个步骤

(1) 创建共享内存,使用shmget函数。

(2) 映射共享内存,将这段创建的共享映射到具体的进程空间去,使用shmat函数

A.创建:

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

(shmget:获取共享内存)

key标识共享内存的键值:0 / IPC_PRIVATE.

key的取值为IPC_PRIVATE,则函数shmget()将创建一块新的共享内存;如果key的取值为0,而参数shmflg中又设置IPC_PRIVATE这个标志,则同样会创建一块新的共享内存。

返回值:如果成功,返回共享内存标识符;如果失败,返回-1

B、映射

int shmat(int shmid ,char *shmaddr ,int flag)

shmat:连接共享内存)

参数:

(1) shmid :shmget函数返回的个共享存储标识符;

(2) shmaddr :一般为0;(表示有系统帮你找一个地址)

(3) flag :决定以什么方式来确定映射的地址(通常为0

返回值:如果成功,则返回共享内存映射到的进程的地址;

如果失败,则返回-1

当一个进程不再需要共享内存时,需要把它从进程地址空间中脱离。

Int shmdt (char *shmaddr)

#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 *p_addr,*c_addr;

if(argc!=2)

{

fprintf(stderr,"Usage:%s\n\a",argv[0]);

exit(1);

}

/* 创建共享内存 */

if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1)

{

fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno));

exit(1);

}

/* 创建子进程 */

if(fork()) // 父进程写

{

p_addr=shmat(shmid,0,0); /*把创建好的内存映射到父进程当中来,shmid:父进程的编号,第二个参数为0,即让系统自动帮找一个地址*/

/*shmat()返回值:如果成功,则返回共享内存映射到的进程的地址;

如果失败,则返回-1*/

memset(p_addr,'\0',1024); /*让内存区全部为结束符*/

strncpy(p_addr,argv[1],1024);

wait(NULL); // 释放资源,不关心终止状态(等待子进程退出)

exit(0);

}

else // 子进程读

{

sleep(1); // 暂停1

c_addr=shmat(shmid,0,0);

printf("Client get %s\n",c_addr);

exit(0);

}

}

分享到:
评论

相关推荐

    Linux程序设计 第4版.haozip01

    Linux程序设计 分卷文件共有以下2个: Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard ...

    Linux程序设计 第4版.haozip02

    Linux程序设计 分卷文件共有以下2个: Linux程序设计 第4版.haozip01.zip Linux程序设计 第4版.haozip02.zip 基本信息 原书名: Beginning Linux Programming 原出版社: Wrox 作者: (英)Neil Matthew Richard ...

    Linux高性能服务器编程PDF带目录高清版

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    Unix环境高级编程(1-11章)

    &lt;br&gt; 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动...

    Unix环境高级编程(12-23章)

    &lt;br&gt; 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动...

    游双-Linux高性能服务器编程(高清pdf+源码)

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    一个进程池的服务器程序

    一个进程池的服务器程序 下面做了非常简单的http服务器,该服务器只能接收Get请求。 流程大概如下: 1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe) 2,父进程预fork n个子进程 3,各个子...

    深入理解LINUX内核(第三版)

    , 《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有...

    嵌入式Linux C语言基础与实例进阶 视频 源程序 PPT

    《嵌入式linux c语言基础与实例进阶》面向学习linux c语言的初中级读者,《嵌入式linux c语言基础与实例进阶》共16章,分别介绍了嵌入式系统基础知识、linux环境下c语言的开发、bootloader、linux环境下c语言编程...

    Linux实验报告-实验一.docx

    中北大学软件学院 实验报告 专 业: 软件工程 方 向: 软件开发与测试 课程名称: Linux程序设计 班 级: 学 号: 姓 名: 辅导教师: 唐道光 2017年4月制 Linux实验报告-实验一全文共11页,当前为第2页。...

    操作系统进程调度实验报告.doc

    基于linux的操作系统进程调度实验报告,很好,很强大

    Linux高性能服务器编程清晰PDF+源码.7z

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、 I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    生产者-消费者问题的模拟实现(课设含源代码).doc

    通过研究进程并发和信号量机制,实现生产者-消费者问题的并发控制。 2、设计要求 1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。 说明:...

    Linux高性能服务器编程高清PDF(带书签)+源码

    第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多...

    unix高级环境编程

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    linux-archive:用于研究进程调度程序Linux归档文件。调度系统设计精要http

    系统设计精要是一系列深入研究系统设计方法的系列文章,文中额外会分析系统设计的理论,然后分析多个实际场景下的具体实现。这是一个季更或半年更的系列,如果你有想要了解的问题,可以在文章下面留言。 调度是一个...

    linux环境高级编程

    本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库,PostScript 打印机驱动程序,...

    Linux多线程 C语言编程关于多线程

    摘要:多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix 系 统中才引入多线程机制,如今,由于自身的许多优点,多线程编程已经得到了广泛的应用。 本文我们将介绍在Linux 下编写多进程和多线程...

    深入理解Linux内核

    , 《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有...

Global site tag (gtag.js) - Google Analytics