LINUX高级IO

高级IO:
阻塞:系统调用io的默认行为,当打开一个低速设备或者去读一个没有数据设备,系统调用默认会以阻塞的方式

虚拟终端\伪终端:
control + alt + FN:切换到指定的终端


打开两个终端:实现交互

终端1:nihao-》发送给终端2
终端2:输入数据-》发送给终端1

fd1 = open(1,操作方式);
fd2 = open(2);
while(1)
{
read(fd1,buf....)
write(fd2,buf......);


read(fd2,buf.....);
write(fd1,.......);
}

close....
asdfasdfasd


非阻塞:在打开文件时,调用的open函数中操作方式上按位或上O_NONBLOCK
fcntl(文件描述符,操作方式);
操作方式:
F_GETFL:获取一个文件描述符的flag选项值,与open函数的的flge,通过返回值带出,将会忽略fcntl的第三个参数
F_SETFL:设置一个文件描述符的flag选项值,通过第三个参数进行设置

fd1,readset


io的多路转接/io的多路复用
select(要监视的所有文件描述符中最大值+1,要监视文件读的集合的地址,要监视的文件写的集合的地址,要监视的其他文件的集合的地址,超时时间):监视文件是否发生了感兴趣的行为
超时时间:如果在指定的时间范围内,没有发生要监视的行为,函数返回0,如果写NULL不设定超时时间

返回值:如果成功,返回已发生行为的文件描述符,失败返回-1,并且设置errno

使用带参宏操作文件集:
FD_CLR(文件描述符,集合地址):从集合中删除指定的文件描述符
FD_ISSET(文件描述符,集合地址):如果指定的文件发生了集合中的行为,返回真
FD_SET(文件描述符,集合地址):将文件描述符加入到指定的集合中
FD_ZERO(集合地址):清空指定的集合

poll(结构体数组的首地址,监视文件的个数,超时时间):监视文件所发生的感兴趣的行为
结构体:
fd:要监视的文件描述符
events:要监视的行为,使用该成员按位或等于上行为,代表加入
revents:已经发生的行为,使用该成员按位&上行为,如果为真代表行为已经发生

行为:
POLLIN:读的行为
POLLOUT:写的行为

超时时间:以毫秒为单位,在指定的时间内如果没有发生感兴趣的行为,函数直接返回0,代表超时,如果值为-1,代表不设置超时

返回值:如果成功返回的是已经发生行为的文件描述符,失败返回-1,超时返回0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值