高级IO函数

概述

  1. 在io操作上设置超时三种方法
  2. read和write这俩个函数的三个变体
  3. recv和send允许通过第四个参数从进程到内核传递标志
  4. readv和writev允许指定往其中输入数据或从其中输出数据的缓冲区向量
  5. recvmsg和sendmsg结合了其它io函数的所有特性,具备接收和发送辅助数据的新能力

套接字超时

在io操作上设置超时三种方法

  1. 调用alarm,它在指定超时期满时产生SIGALRM信号。
  2. 在select种阻塞等待io
  3. 使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项

recv和send函数

注:若一个进程需要由内核更新标志,它就必须调用recvmsg而不是调用recv或者recvfrom

#include <sys/socket.h>
ssize_t recv(int sockfd,void * buff,size_t nbytes,int flags);
ssize_t send(int sockfd,const void* buff,size_t nbytes,int flags);
				返回:若成功则为读入或写出的字节数,若出错则为-1

排队的数据量

获悉已排队的数据量

  1. 目的在于避免读操作阻塞在内核中,可以使用非阻塞io
  2. 既想查看数据,又想数据仍然留在接收队列中供进程读取可以使用MSG_PEEK
  3. 一些实现支持ioctl的FIONREAD命令

标准IO函数库的三类缓冲

  1. 完全缓冲:缓冲区满,进程显式调用fflush或者调用exit终止自身才发生io,标准io缓冲区通常大小为8192字节
  2. 行缓冲:碰到一个换行符,进程显式调用flush或调用exit终止自身
  3. 不缓冲:每次调用标准io输出函数都发生io
    标准io函数库的大多数Unix实现使用如下限制
标准错误输出总是不缓冲
标准输入和标准输出完全缓冲,除非它们指代终端设备(行缓冲)
所有其它io流都是完全缓冲,除非它们指代终端设备(行缓冲)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值