关于Linux的进程通信中信号的函数理解

信号发送函数int kill(pid_t pid, int sig);     pid   正数:要接受信号的进程的进程号(常用)
  0:信号被发送到所有和pid进程在同一个进程组的进程
 -1:信号发送给所有进程表中的进程(除了进程号最大的进程外)

  sig 信号 

                                                                          返 回 值:成功:0

  失败:-1

  作用:可以对相应的pid进程发送任意 允许的信号,可以对本进程发送,也可以对其他进程发送。

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

自我操作函数int raise(int sig);    sig为对自己操作的信号编号,可以在程序中使用,对本进程发送信号。

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

闹钟信号函数int alarm(unsigned int seconds);     参数为秒数,该函数只能给本进程发送闹钟信号,如果重复设置,调用此alarm前,

进程中已经设置了闹钟时间则返回上一个闹钟时间的剩余时间,否则返回0。   并且会按照第二层设置的时间重新计时。


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


睡眠函数int pause(void);    在执行了此函数后,进程会进入睡眠状态,成功返回0,失败返回-1。


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


信号处理函数void (*signal(int signum, void (*handler)(int)))(int);        该函数可以重新定义信号到来之后进程要进行的操作,第一个参数为要重定义的信号编号,第二个参数为信号到来时所要执行的函数指针,也就是函数名。成功返回值为设置前的信号处理方式,也是一个函数指针。     重新定义之后,需要编写信号处理函数,形式为void 函数名(int n);


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


创建或打开一个共享内存: int shmget(key_t key, int size, int shmflg);
函数形参:
key: IPC_PRIVATE 或 ftok的返回值 ,其中IPC_PRIVATE为0,仅适用与有情缘关系的进程进行通信
size: 共享内存区大小
shmflg:同open函数的权限位,也可以用8进制表示法,一般为0666.
返 回 值:
成功:共享内存段标识符 -- ID 
失败:-1

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

创建一个key值:

函数原型:key_t ftok(const char *path, int id);

函数形参:

path为打开的文件,实际仅仅用于映射内存,并不写入文件,路径下必须存在该文件

id为任意一个字符,在不同进程中以相同的字符打开,即可得到相同的KEY。可以进行通信

返回值:

返回值为一个key值,可用于映射共享内存

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


将共享内存映射到用户的内存空间:

函数原型:void *shmat(int shmid, const void *shmaddr, int shmflg);

函数形参:

shmid为共享内存ID号,也就是shmget()函数的返回值。

shmaddr为映射地址,一般选择NULL

shmflg表示读写权限,SHM_RDONLY  表示共享内存只读 ,默认为0,表示共享内存可读可写

返回值: 成功返回映射地址的首地址,可以对空间进行访问。


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

删除进程空间映射:

函数原型:int shmdt(const void *shmaddr);

函数形参:

shmaddr为映射地址的首地址,类似于free函数

返回值: 成功返回0,失败返回-1.

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


控制共享内存:

函数原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf);

函数形参:

shmid为要操作的共享内存的id号

cmd为要进行操作的类型,IPC_STAT为获取对象属性,IPC_SET为设置对象属性,IPC_RMID为删除对象

buf 在指定IPC_STAT/IPC_SET时,作为保存或者设置属性的参数,在IPC_RMID时为NULL。

返回值: 成功返回0,失败返回-1。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值