时间秒数. 例子:int flag=0; void myself() { flag=1; printf("get signal SIGALRM\n"); /*若要重新设置SIGALRM信号中断处理函数为本函数则执行 *以下步骤*/ void (*a)(); a=myself; signal(SIGALRM,a); flag=2; } main() { alarm(100); /*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 #include #include 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)改为当前系统时间. 以上信息可用命令ipcs -a看到. 返回值:成功则返回0,否则返回-1. 14.msgrcv() 功能:从消息队列中取得指定类型的消息. 语法:#include #include #include int msgrcv(msqid,msgp,msgsz,msgtyp,msgflg) int msqid; void *msgp; int msgsz; long msgtyp; int msgflg; 说明:本系统调用从由msqid指定的消息队列中读取一个由msgtyp指定 类型的消息到由msgp指向的缓冲区中,同样的,该缓冲区的结构如 前所述,包括消息类型和消息正文.msgsz为可接收的消息正文的 字节数.若接收到的消息正文的长度大于msgsz,则会被截短到 msgsz字节为止(当消息标志msgflg&MSG_NOERROR为真时),截掉的 部份将被丢失,而且不通知消息发送进程. msgtyp指定消息类型: . 为0则接收消息队列中第一个消息. . 大于0则接收消息队列中第一个类型为msgtyp的消息. . 小于0则接收消息队列中第一个类型值不小于msgtyp绝对值且 类型值又最小的消息. msgflg指定操作行为: . 若(msgflg&IPC_NOWAIT)是真的,调用进程会立即返回,若没有 接收到消息则返回值为-1,errno设置为ENOMSG. . 若(msgflg&IPC_NOWAIT)不是真的,则调用进程会被挂起直到下 面情况之一发生:  上一页 [1] [2] [3] [4] [5] [6] 下一页
|
|