文档介绍:UNIX系统开发-系统调用-STREAM机制
基本上所有的系统调用成功时返回0或正数,失败时返回负值。
流的高级操作
poll系统调用的格式
#include <>
#include <poll>
int poll(fds,nfds,timeout)
struct pollfd fds[]; /*流组描述结构*/
unsigned long nfds; /*流个数*/
int timeout; /*查询超时时间*/
参数与功能说明:
参数nfds指出流组中流的个数,而fds是一个流组描述结构,他的格式如下:
struct pollfd
{
int fd; /*流描述符*/
short events; /*用户期望的事件*/
short revents; /*流上发生的事件*/
}fds[nfds];
其功能是查询流组中各条流上是否发生了用户期望的事件。若有事件发生,则将发生的事件登记在流组描述结构的revents域中,返回给用户。如果没有任何事件发生,则睡眠等待直到有事件发生或等待超时。超时时间有参数timeout给出,单位为毫秒。Timeout为-1时,表示timeout取值无穷大,可以无限止地等待。
用户期望的事件有三类,他们的取值及含义如下:
POLLIN:期望相应流上能到达一个数据消息。
POLLOUT:期望能向相应流上发送一个数据消息。
POLLPRI:期望相应流上能到达一个高优先权数据消息(高优先权是一个控制消息)
Revents取值有三种情形:0、已发生的事件、出错事件。
0表示相应流上没有发生任何期望的事件。已发生的事件即是对该流期望的事件;出错事件是poll调用出错时设置的值,他可有三种取值,在revents中可能是这三种值的“或”。出错事件的取值及其含义如下:
POLLERR:流上到达一个错误消息,以后对流的操作不能继续进行。
POLLHUP:流上出现了挂起条件,此后不能对流再发送消息。
POLLNVAL:非法流描述符。
ioctl系统调用的格式
#include <>
int ioctl(fd,I_SETSIG,events)
int fd; /*流描述符*/
short events; /*用户设置的期望事件*/
参数与功能说明:
当指定流上发生期望事件时,系统向调用进程发送一个SIGPOLL信号。I_SETSIG命令能设置的期望事件如下:
S_INPUT:流首到达了一个数据消息,在它到达之前,流首没有数据消息存在。
S_OUTPUT:含义同POLLOUT。
S_HIPRI:含义同POLLPRI。
S_MSG:流首到达了含有SIGPOLL信号消息的消息。
putmsg,getmsg系统调用的格式
#include <>
int putmsg(fd,ctlptr,dataptr,flags)
int fd; /*流描述符*/
struct strbuf ctlptr; /*控制信息缓冲*/
struct strbuf *dataptr; /*数据信息缓冲*/
int flags ; /*发送标志*/
int getmsg(fd,ctlptr,dataptr,flags)
int fd