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

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

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

信号灯种类:

posix有名信号灯

posix基于内存的信号灯(无名信号灯)

System V信号灯(IPC对象)

二值信号灯:值为0或1。与互斥锁类似,资源可用时值为1,不可用时值为0。

计数信号灯:值在0到n之间。用来统计资源,其值代表可用资源数。

System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。System V 信号灯由内核维护

Posix信号灯指的是单个计数信号灯

信号灯的应用:

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

等待操作是等待信号灯的值变为大于0,然后将其减1;而释放操作则相反,用来唤醒等待资源的进程或者线程

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

获取信号量标识

int semget(

key_t key, //和信号灯集关联的key值

int nsems, //信号灯集中包含的信号灯数目

int semflg//信号灯集的访问权限,通常为IPC_CREAT | 0666

);

返回值:

成功:则返回信号量集的IPC标识符。

失败,则返回-1,并且设置errno,

EACCES:没有访问该信号量集的权限

EEXIST:信号量集已经存在,无法创建

ENOENT:信号量集不存在,同时没有使用IPC_CREAT

信号操作

int semop(

int semid, //信号灯集ID

struct sembuf  *opsptr,

size_t  nops  //要操作的信号灯的个数

);

参数:

struct sembuf {

short  sem_num;  //要操作的信号灯的编号

short  sem_op;   //0:等待,直到信号灯的值变成0

    //1:释放资源,V操作

    //-1:分配资源,P操作

short  sem_flg;  //0,IPC_NOWAIT,SEM_UNDO

};

返回值:

成功:0

出错:-1

信号控制

int semctl(

int semid, //信号灯集ID

int semnum,  //要修改的信号灯编号

int cmd…/*union semun arg*/

);

参数:

cmd:

GETVAL:获取信号灯的值

SETVAL:设置信号灯的值

IPC_RMID:从系统中删除信号灯集合

返回值:

成功:0

出错:-1

进程间通讯方式比较

pipe:具有亲缘关系的进程间,单工,数据在内存中

fifo:用于任意进程间,双工,有文件名,数据在内存

signal:唯一的异步通信方式

msg:常用于cs模式中, 按消息类型访问 ,可有优先级

shm:效率最高(直接访问内存) ,需要同步、互斥机制

sem:配合共享内存使用,用以实现同步和互斥

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

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

推荐文章
    热点阅读