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。