高级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