加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX环境高级编程:进程管理和通信

发布时间:2016-09-27 18:52:05 所属栏目:Unix 来源:站长网
导读:副标题#e# 进程和程序的区别: 进程: 程序的一次执行过程 动态过程,进程的状态属性会发生变化 程序:存放在磁盘上的指令、数据的有序集合 是个文件,可直观看到 程序program 静态的概念,本身不会发生变化。指令谁来执行,数据谁来访问?cpu! 但前提是cpu

参数

signum:指定信号

handler:

SIG_IGN:忽略该信号。

SIG_DFL:采用系统默认方式处理信号。

自定义的信号处理函数指针

返回值

成功:设置之前的信号处理方式

出错:-1

sigemtpyset(&set)

sigaddset(&set, signum)

sigprocmask(SIG_UNBLOCK|SIG_BLOCK, &set, NULL)

System V IPC对象

IPC对象,都需要key来产生,通过ID来操作对象。

UNIX环境高级编程:进程管理和通信

共享内存

共享内存块提供了在任意数量的进程之间进行高效双向通信的机制。每个使用者都可以读取写入数据,但是所有程序之间必须达成并遵守一定的协议,以防止诸如在读取信息之前覆写内存空间等竞争状态的出现。

Linux无法严格保证提供对共享内存块的独占访问,甚至是在您通过使用IPC_PRIVATE创建新的共享内存块的时候也不能保证访问的独占性。 同时,多个使用共享内存块的进程之间必须协调使用同一个键值。

产生一个key值

#include <sys/types.h>

#include <sys/ipc.h>

key_t ftok(

const char *pathname,

//就是你指定的文件名(已经存在的文件名),一般使用当前目录'.'。

int proj_id

id//id是子序号。(一般填存任意字母或者数字)

)

返回值:

成功:一个key值,

失败:-1,并设置errno.

  

注意:

P1 创建的IPC对象如何让另一进程知道ID号?ID是系统分配的。但在创建对象时可以指定key,或者可以事先约定好

第一个进程用key来创建IPC对象,第二个进程只需要通过key来打开IPC对象

共享内存的特点:

共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。

共享内存的使用包括如下步骤:

创建/打开共享内存 :需要判断是否已经创建过.

映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问.

撤销共享内存映射.

删除共享内存对象.

调试:

查看系统中的对象ipcs

删除系统中的对象ipcrm

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/shm.h>

创建/打开 共享内存

int shmget(

key_t key, //

IPC_PRIVATE或

ftok的返回值,

看到很多key的值是0,是系统中用IPC_PRIVATE创建的。

int size,  //

共享内存区大小

int shmflg

);

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读