📄 00000019.htm
字号:
void myself() <BR> { <BR> flag=1; <BR> printf("get signal SIGALRM\n"); <BR> /*若要重新设置SIGALRM信号中断处理函数为本函数则执行 <BR> *以下步骤*/ <BR> void (*a)(); <BR> a=myself; <BR> signal(SIGALRM,a); <BR> flag=2; <BR> } <BR> main() <BR> { <BR> alarm(100); /*100秒后发超时中断信号*/ <BR> while (1) { <BR> sleep(2000); /*等待中断信号*/ <BR> if (flag==1) { <BR> printf("skip system call sleep\n"); <BR> exit(0); <BR> } <BR> if (flag==2) { <BR> printf("skip system call sleep\n"); <BR> printf("waiting for next signal\n"); <BR> } <BR> } <BR> } <BR> 13.msgsnd() <BR> 功能:发送消息到指定的消息队列中. <BR> 语法:#include <sys/types.h> <BR> #include <sys/ipc.h> <BR> #include <sys/msg.h> <BR> int msgsnd(msqid,msgp,msgsz,msgflg) <BR> int msqid; <BR> void *msgp; <BR> size_t msgsz; <BR> int msgflg; <BR> 说明:发送一个消息到由msqid指定消息队列标识号的消息队列. <BR> 参数msgp指向一个用户定义的缓冲区,并且缓冲区的第一个域应 <BR> 为长整型,指定消息类型,其他数据放在缓冲区的消息中其他正文 <BR> 区内.下面是消息元素定义: <BR> long mtype; <BR> char mtext[]; <BR> mtype是一个整数,用于接收进程选择消息类型. <BR> mtext是一个长度为msgsz字节的任何正文,参数msgsz可从0到系 <BR> 统允许的最大值间变化. <BR> msgflg指定操作行为: <BR> . 若(msgflg&IPC_NOWAIT)是真的,消息并不是被立即发送而调用 <BR> 进程会立即返回. <BR> . 若(msgflg&IPC_NOWAIT)不是真的,则调用进程会被挂起直到下 <BR> 面情况之一发生: <BR> * 消息被发送出去. <BR> * 消息队列标志被系统删除.系统调用返回-1. <BR> * 调用进程接收到一个未被忽略的中断信号,调用进程继续 <BR> 执行或被终止. <BR> 调用成功后,对应指定的消息队列的相关结构做如下动作: <BR> . 消息数(msg_qnum)加1. <BR> . 消息队列最近发送进程号(msg_lspid)改为调用进程号. <BR> . 消息队列发送时间(msg_stime)改为当前系统时间. <BR> 以上信息可用命令ipcs -a看到. <BR> 返回值:成功则返回0,否则返回-1. <BR> 14.msgrcv() <BR> 功能:从消息队列中取得指定类型的消息. <BR> 语法:#include <sys/types.h> <BR> #include <sys/ipc.h> <BR> #include <sys/msg.h> <BR> int msgrcv(msqid,msgp,msgsz,msgtyp,msgflg) <BR> int msqid; <BR> void *msgp; <BR> int msgsz; <BR> long msgtyp; <BR> int msgflg; <BR> 说明:本系统调用从由msqid指定的消息队列中读取一个由msgtyp指定 <BR> 类型的消息到由msgp指向的缓冲区中,同样的,该缓冲区的结构如 <BR> 前所述,包括消息类型和消息正文.msgsz为可接收的消息正文的 <BR> 字节数.若接收到的消息正文的长度大于msgsz,则会被截短到 <BR> msgsz字节为止(当消息标志msgflg&MSG_NOERROR为真时),截掉的 <BR> 部份将被丢失,而且不通知消息发送进程. <BR> msgtyp指定消息类型: <BR> . 为0则接收消息队列中第一个消息. <BR> . 大于0则接收消息队列中第一个类型为msgtyp的消息. <BR> . 小于0则接收消息队列中第一个类型值不小于msgtyp绝对值且 <BR> 类型值又最小的消息. <BR> msgflg指定操作行为: <BR> . 若(msgflg&IPC_NOWAIT)是真的,调用进程会立即返回,若没有 <BR> 接收到消息则返回值为-1,errno设置为ENOMSG. <BR> . 若(msgflg&IPC_NOWAIT)不是真的,则调用进程会被挂起直到下 <BR> 面情况之一发生: <BR> * 队列中的消息的类型是有效的. <BR> * 消息队列标志被系统删除.系统调用返回-1. <BR> * 调用进程接收到一个未被忽略的中断信号,调用进程继续 <BR> 执行或被终止. <BR> 调用成功后,对应指定的消息队列的相关结构做如下动作: <BR> . 消息数(msg_qnum)减1. <BR> . 消息队列最近接收进程号(msg_lrpid)改为调用进程号. <BR> . 消息队列接收时间(msg_rtime)改为当前系统时间. <BR> 以上信息可用命令ipcs -a看到. <BR> 返回值:调用成功则返回值等于接收到实际消息正文的字节数. <BR> 不成功则返回-1. <BR> 15.msgctl() <BR> 功能:消息控制操作 <BR> 语法:#include <sys/types.h> <BR> &nbs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -