资源描述:
《unix系统开发-系统调用-stream机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、UNIX系统开发-系统调用-STREAM机制基本上所有的系统调用成功时返回0或正数,失败时返回负值。流的高级操作poll系统调用的格式#include#includeintpoll(fds,nfds,timeout)structpollfdfds[];/*流组描述结构*/unsignedlongnfds;/*流个数*/inttimeout;/*查询超时时间*/参数与功能说明:参数nfds指出流组中流的个数,而fds是一个流组描述结构,他的格式如下:structpollfd{intfd;/*流描述符*/shortevents;/*用户期望的事
2、件*/shortrevents;/*流上发生的事件*/}fds[nfds];其功能是查询流组中各条流上是否发生了用户期望的事件。若有事件发生,则将发生的事件登记在流组描述结构的revents域中,返回给用户。如果没有任何事件发生,则睡眠等待直到有事件发生或等待超时。超时时间有参数timeout给出,单位为毫秒。Timeout为-1时,表示timeout取值无穷大,可以无限止地等待。用户期望的事件有三类,他们的取值及含义如下:POLLIN:期望相应流上能到达一个数据消息。POLLOUT:期望能向相应流上发送一个数据消息。POLLPRI:期望相应流上能到达一个高优先权数据消息(
3、高优先权是一个控制消息)Revents取值有三种情形:0、已发生的事件、出错事件。0表示相应流上没有发生任何期望的事件。已发生的事件即是对该流期望的事件;出错事件是poll调用出错时设置的值,他可有三种取值,在revents中可能是这三种值的“或”。出错事件的取值及其含义如下:POLLERR:流上到达一个错误消息,以后对流的操作不能继续进行。POLLHUP:流上出现了挂起条件,此后不能对流再发送消息。POLLNVAL:非法流描述符。ioctl系统调用的格式#includeintioctl(fd,I_SETSIG,events)intfd;/*流描述符*/
4、shortevents;/*用户设置的期望事件*/参数与功能说明:当指定流上发生期望事件时,系统向调用进程发送一个SIGPOLL信号。I_SETSIG命令能设置的期望事件如下:S_INPUT:流首到达了一个数据消息,在它到达之前,流首没有数据消息存在。S_OUTPUT:含义同POLLOUT。S_HIPRI:含义同POLLPRI。S_MSG:流首到达了含有SIGPOLL信号消息的消息。putmsg,getmsg系统调用的格式#includeintputmsg(fd,ctlptr,dataptr,flags)intfd;/*流描述符*/structstrb
5、ufctlptr;/*控制信息缓冲*/structstrbuf*dataptr;/*数据信息缓冲*/intflags;/*发送标志*/intgetmsg(fd,ctlptr,dataptr,flags)intfd;/*流描述符*/structstrbufctlptr;/*控制信息缓冲*/structstrbuf*dataptr;/*数据信息缓冲*/intflags;/*接收标志*/参数与功能说明:putmsg将具有控制信息和数据信息的消息顺流向下发送,控制信息放入由ctlptr指出的具有strbuf结构形式的缓冲区中,而数据信息放入由dataptr指出的具有strbuf结构
6、形式的缓冲区中;getmsg与putmsg相反,它从流首接收消息,将数据信息和控制信息分别放入由dataptr,ctlptr指出的缓冲区中。Strbuf的结构形式如下:structstrbuf{intmaxlen;/*缓冲区最大长度*/intlen;/*缓冲区中已有信息的字节数*/char*buf;/*指向缓冲区的指针*/}select系统调用的格式#include#include#includeintselect(maxfdpl,readfds,writefds,exceptfds,timeou
7、t)intmaxfdpl;/*需要轮询的最大描述符*/fd_set*readfds;/*读就绪描述符*/fd_set*writefds;/*写就绪描述符*/fd_set*exceptfds;/*异常条件*/structtimeval*timeout;/*等待时间*/参数与功能说明:本系统调用通过修改readfds,writefds,exceptfds这三个参数来指示各参数中的哪些描述符已对指定的条件就绪。这三个参数也是值结果参数,调用者应使用FD_ISSET宏测试fd_set结构中的指定位。本系统调用返回就绪的描述