⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unix系统开发-系统调用-stream机制.txt

📁 linux下根文件系得统制作工具。内带shell命令
💻 TXT
字号:
UNIX系统开发-系统调用-STREAM机制
基本上所有的系统调用成功时返回0或正数,失败时返回负值。
流的高级操作 
poll系统调用的格式
#include <stropts.h>
#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 <unistd.h>
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 <stropts.h>
int putmsg(fd,ctlptr,dataptr,flags)
int fd; /*流描述符*/
struct strbuf ctlptr; /*控制信息缓冲*/
struct strbuf *dataptr; /*数据信息缓冲*/
int flags ; /*发送标志*/
int getmsg(fd,ctlptr,dataptr,flags)
int fd; /*流描述符*/
struct strbuf ctlptr; /*控制信息缓冲*/
struct strbuf *dataptr; /*数据信息缓冲*/
int flags ; /*接收标志*/
参数与功能说明:
putmsg将具有控制信息和数据信息的消息顺流向下发送,控制信息放入由ctlptr指出的具有strbuf结构形式的缓冲区中,而数据信息放入由dataptr指出的具有strbuf结构形式的缓冲区中;getmsg与putmsg相反,它从流首接收消息,将数据信息和控制信息分别放入由dataptr,ctlptr指出的缓冲区中。Strbuf的结构形式如下:
struct strbuf
{
int maxlen; /*缓冲区最大长度*/
int len; /*缓冲区中已有信息的字节数*/
char *buf; /*指向缓冲区的指针*/
}
select系统调用的格式
#include <sys/types.h>
#include <sys/time.h>
#include <sys/select.h>
int select(maxfdpl,readfds, writefds,exceptfds,timeout)
int maxfdpl; /*需要轮询的最大描述符*/
fd_set *readfds; /*读就绪描述符*/
fd_set *writefds; /*写就绪描述符*/
fd_set *exceptfds; /*异常条件*/
struct timeval *timeout; /*等待时间*/
参数与功能说明:
本系统调用通过修改readfds,writefds,exceptfds这三个参数来指示各参数中的哪些描述符已对指定的条件就绪。这三个参数也是值结果参数,调用者应使用FD_ISSET宏测试fd_set结构中的指定位。本系统调用返回就绪的描述符总数,如果在任何描述符前定时器值已到,则返回0值。通常出错时返回值是-1。
select调用涉及到几个宏,现分述如下:
FD_ZERO(fd_set *fdset):在fd_set中清掉所有位。
FD_SET(int fd, fd_set *fdset):在fd_set中把fd位置上。
FD_CLR(int fd,fd_set *fdset):在fd_set中把fd位清掉。
FD_ISSET(int fd,fd_set *fdset):测试fd_set中fd位是否置上。













⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -