进程和信号和IPC机制:帮我记住

原创 2012年03月28日 17:50:36

一.信号

* <signal.h> <sys/type.h> <unistd.h>

* int sigaction( SIGINT, &act , 0 ) ;          act结构体:struct sigaction act;  { act.sa_handler = abc; sigemptyset (& act.sa_mask ) ;  act.sa_flags=0; }

* int kill (pid_t pid , int sig )   unsigned int alarm( unsigned int seconds) ;   pause()  getppid()   getpid()  void ding( ing sig) {} 这个是信号注册函数。 pid_t waitpid()   fork() ==0  子进程    -1 失败  system()   wait()  父等待子

--------------------------------------------------------

二。进程间的通信:管道

file=popen(命令,r or w )  ;通过file来,fwrite 读  fread 写

FIFO 先进先出  LIFO 后进先出                    ,   pipe调用(file[2]) :不需要启动一个shell , ---> 父子进程的读写通信  , dup() dup2()  FIFO文件 

管道具有阻塞特性------进程同步和数据的双向传递。

----------------------------------------------------------

三。IPC机制

一。信号量:0 和 1 :二进制信号量      多个正整数值:通用信号量

* linux 信号量函数都是针对成组的通用信号量进行操作的。 

* <sys/sem.h> 

*int semget(key_t key , int num_sems, int sem_flags);;   创建一个信号量或获取一个已有的信号量。

参数1:随便给一个数作为键  。  参数2:信号数量:一般为1    参数3: IPC_)CREAT || 0666  IPC_EXCL

*int semop(int sem_id , struct sembuf *sem_ops, size_t num_sem_ops );

用于改变信号量的值:  + 1  -1

struct sembuf {  

short sem_num ; 信号量编号,除非你使用一组信号量,否则一般取0

short sem_op;  +1 p 操作    -1  v操作

short sem_flg ;  一般设为sem_UNDO   要求系统自动清理该信号量

}

* int semctl( int sem_id , int sem_num , int command , .. ); 控制信号量函数 

参数2:一般为0,除非一组。   参数3:命令:设置呢还是删除呢   如果设置的话,参数4就是一个结构体罗。 即设过去罗

插入代码:493页

关键在于:可以封装成5个函数,1 get 创建或获取  2.初始化它  3.+1 p操作函数  4.-1 v 操作函数  5. 删除清理它

------------------------------------------------------

二。共享内存   :通过小消息来同步对该内存的访问(同步由程序员来实现)。 (在共享内存中搞个小成员标识一下是否可读,或者现在可写了。)

共享内存使用的函数类似于信号量函数,4个基本函数:

* <sys/shm.h>  shm_i  4个基本函数。

* int shmget ( key_t key , size_t size , int shmflg );   创建共享内存;  参数2:内存大小(字节) , 参数3:读写权限设置 IPC_CREAT | 0666

*void * shmat (int shm_id , const void * shm_addr , int shmflg); 将物理内存映射到进程内存

参数2: 给空指针,有系统自动选择地址映射  参数3:给0,由系统选一个连接地址。

* void shmdt(void* ) 参数是shmat()返回的地址指针。 解除映射,并未删除,即当前进程不可用该共享内存了。

* int shmctl (int shm_id , int command , sturct shmid_ds *buf) ; 共享内存控制函数 :删除,设置值。 

(已删除的共享内存,会直到它从最后一个进程中分离为止,才真正的删除掉了。)

?消费者和生产者?

插入代码:499页   ------》  共享内存  1. 消息标志 (1,0):用来控制同步 2.共享的数据:用来共享滴。

------------------------------------------------------

四。消息队列: 提供了一种在两个不相关的进程之间传递数据的简单又有小的方法。

* <sys/msg.h>  头文件

*int msgget(key_t key , int msg_flg);  创建和访问一个消息队列, 参数2: 由IPC_CREAT定义的一个特殊值和权限标志按或才能创建一个新的消息队列。

* int msgsnd(int msqid , const void *msg_ptr , size_t msg_sz, int msg_flg ); 把消息添加到消息队列中去。

参数2:消息指针   参数3:消息长度  参数4:如果消息队列满了,那么返回-1 呢还是 阻塞呢 等它减去一个呢。 所以这个是标识位

消息类型应该是如下类似结构:struct my_msg{  long int msg_type;   char mydata[100] ;}  第二个成员是随意一个类型。

* int msgrcv ( int msgid , void * msg_ptr , size_t msg_sz , long int msgtype, int msgflg); 获取消息

参数2:接收这个消息的指针  参数3:消息长度  参数4:消息类型 0  >0 <0  参数4: 没有消息的情况下如何处理呢?

* int msgctl (int msqid , int command , struct msqid _ds *buf); 消息队列控制函数, 同共享内存类似的功能。

插入代码! 消息队列无需进程提供同步方法。

-----------------------------------------------------------------------

大数据:用共享内存

小数据:用消息队列

IPC命令(shell命令):用来清理系统游离的IPC机制。

ipcs -s  ipcs -m ipcs -q   ;查看  信号量  共享内存  消息队列

ipcrm -s id  ipcrm -m id ipcrm -q id ; 删除系统游戏的IPC机制。

 

 

 

相关文章推荐

Linux C编程--进程间通信(IPC)5--System V IPC 机制2--信号量

信号量定义  最简单的信号量是一个只有0与1两个值的变量,二值信号量。这是最为通常的形式。具有多个正数值的信号量被称之为通用信号量。在本章的其余部分,我们将会讨论二值信号量。 P与V的定义...

进程间通信 IPC 主题二之 信号量

IPC主题二:信号量信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识,信号量在此过程中负责数据操作的...

进程间通信IPC之--信号(signal)--下

简介: 在信号(上)中,讨论了linux信号种类、来源、如何安装一个信号以及对信号集的操作。本部分则首先讨论从信号的生命周期上认识信号,或者宏观上看似简单的信号机制(进程收到信号后,作相应的处理,看上...

深入理解Linux进程间通信(IPC)-- 信号signal

2. 信号(上) 2.1. 信号及信号来源 2.1.1 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个...

Linux 进程通信IPC对象之信号量

什么是信号量信号量与其他IPC对象不同,它是一个计数器,用于多个进程对共享数据对象的访问,它的本质是一种数据操作锁,它不像消息队列和管道那样具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设...

进程间通信IPC——信号量

//===================信号量============= 信号量:主要来实现进程间或线程间的同步(也可以实现互斥) 信号量的值:表示资源的可用量。   信号量操作流程: 1...

Linux进程,信号,IPC等知识普及强文,最后讲了下gprof用法(转)

Linux进程,信号,IPC等知识普及强文,最后讲了下gprof用法(转) 来源: ChinaUnix博客  日期: 2008.03.14 15:48 (共有条评论) ...

Linux进程通信(三)IPC信号

信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。 ...

linux进程间通讯-System V IPC 信号量

UNIX 内核管理的进程自主地操作,从而产生更稳定的系统。然而,每个开发人员最终都会遇到这样的情况,即其中一组进程需要与另一组进程通信,也许是为了交换数据或发送命令。这种通信称为进程间通信(Inter...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程和信号和IPC机制:帮我记住
举报原因:
原因补充:

(最多只允许输入30个字)