sp; /*100秒后发超时中断信号*/ while (1) {
sleep(2000); /*等待中断信号*/
if (flag==1) {
printf("skip system call sleep\n");
exit(0);
}
if (flag==2) {
printf("skip system call sleep\n");
printf("waiting for next signal\n");
}
}
}
13.msgsnd()
功能:发送消息到指定的消息队列中.
语法:#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgsnd(msqid,msgp,msgsz,msgflg)
int msqid;
void *msgp;
size_t msgsz;
int msgflg;
说明:发送一个消息到由msqid指定消息队列标识号的消息队列.
参数msgp指向一个用户定义的缓冲区,并且缓冲区的第一个域应
为长整型,指定消息类型,其他数据放在缓冲区的消息中其他正文
区内.下面是消息元素定义:
long mtype;
char mtext[];
mtype是一个整数,用于接收进程选择消息类型.
mtext是一个长度为msgsz字节的任何正文,参数msgsz可从0到系
统允许的最大值间变化.
msgflg指定操作行为:
. 若(msgflg&IPC_NOWAIT)是真的,消息并不是被立即发送而调用
进程会立即返回.
. 若(msgflg&IPC_NOWAIT)不是真的,则调用进程会被挂起直到下
面情况之一发生:
* 消息被发送出去.
* 消息队列标志被系统删除.系统调用返回-1.
* 调用进程接收到一个未被忽略的中断信号,调用进程继续
执行或被终止.
调用成功后,对应指定的消息队列的相关结构做如下动作:
. 消息数(msg_qnum)加1.
. 消息队列最近发送进程号(msg_lspid)改为调用进程号.
. 消息队列发送时间(msg_stime)改为当前系统时间.
&nbs