您的位置:首页 > 其它

套接口和标准io

2010-09-04 13:43 148 查看
fdopen 函数,open可以重任何一个描述字创建一个标准i/o流

fdopen(int filders,const chat *mode); 将文件描述符转换为文件指针。

标准io的3类缓冲:

full buffering,只有在出现缓冲区满,进程显示调用fflush,或者进程调用exit终止自身,通常的大小是8192。

line buffering 只有在碰到换行符的时候,进程调用fflush或者调用exit函数来终止自身。

unbuffering,每次调用标准io函数输出函数都发生io。

标准io的规则:

标准错误输出总是不缓冲。

标准输入和标准输出完全缓冲,除非是终端设备。

所有的其他的io流都是完全缓冲,除非是终端设备。

/dev/poll接口:

使用步骤:

1:打开/dev/poll。

2:初始化一个pollfd结构。

3:调用write函数在/dev/poll设备上写这个结构数组一把它传递给内核。

struct dvpoll

{

struct pollfd *dp_fds;//指向一个缓冲区,在调用ioctl时返回时存放

//一个pollfd结构。

int dp_nfds;//缓冲区的大小;

int dp_timeout;//当为0的时候,就是非阻塞,但为-1的时候,没有

//设置超时。

};

struct pollfd

{

int fd;//描述字,sockfd,比如

short events;//request events to watch

short revents;//returned events witnessed

};

events:

POLLIN

有数据可读。

POLLRDNORM

有普通数据可读。

POLLRDBAND

有优先数据可读。

POLLPRI

有紧迫数据可读。

POLLOUT

写数据不会导致阻塞。

POLLWRNORM

写普通数据不会导致阻塞。

POLLWRBAND

写优先数据不会导致阻塞。

POLLMSG

SIGPOLL 消息可用。

此外,revents域中还可能返回下列事件:

POLLER

指定的文件描述符发生错误。

POLLHUP

指定的文件描述符挂起事件。

POLLNVAL

指定的文件描述符非法。

成功时,poll返回revents 域不为0的文件描述符的个数;如果超时前没有发生任何事件,poll返回0,失败返回-1,并设置errno为下列值之一:

一个或多个结构体中指定的文件描述符无效。

EFAULT

fds指针指向的地址超出进程的地址空间。

EINTR

请求的事件之前产生一个信号,调用可以重新发起。

EINVAL

nfds参数超出PLIMIT_NOFILE值。

ENOMEM

可用内存不足,无法完成请求。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: