基本上所有的系統調用成功時返回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 HTTP://www.aliyun.com/zixun/aggregation/38907.html">events; /*使用者期望的事件*/
short revents; /*流上發生的事件*/
}fds[nfds];
其功能是查詢流組中各條流上是否發生了使用者期望的事件。 若有事件發生,則將發生的事件登記在流組描述結構的revents域中,返回給使用者。 如果沒有任何事件發生,則睡眠等待直到有事件發生或等待超時。 超時時間有參數timeout給出,單位為毫秒。 Timeout為-1時,表示timeout取值無窮大,可以無限止地等待。
使用者期望的事件有三類,他們的取值及含義如下:
POLLIN:期望相應流上能到達一個資料消息。
POLLOUT:期望能向相應流上發送一個資料消息。
POLLPRI:期望相應流上能到達一個高優先權資料消息(高優先權是一個控制訊息)
Revents取值有三種情形:0、已發生的事件、出錯事件。
0表示相應流上沒有發生任何期望的事件。 已發生的事件即是對該流期望的事件;出錯事件是poll調用出錯時設置的值,他可有三種取值,在revents中可能是這三種值的「或」。 出錯事件的取值及其含義如下:
POLLERR:流上到達一個錯誤訊息,以後對流的操作不能繼續進行。
POLLHUP:流上出現了掛起條件,此後不能對流再發送消息。
POLLNVAL:非法流描述項。