`
memorymyann
  • 浏览: 271923 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

16.I/O函数

阅读更多

最早使用的read与write函数,下面是几种提供额外功能的I/O函数。

1.recv与send函数

#include "sys/socket.h"

ssize_t recv(int sockfd, void * buff, ssize_t nbytes, int flags)

ssize_t send(int sockfd, void * buff, ssize_t nbytes, int flags) 错误返回-1,成功则则返回读入或者写出的字节数。


除了最后多了个参数flags意外,其它的和read和write并没有太多区别,对于flags有以下几种值:

MSG_DONTROUTE:不查路由表

MSG_DONTWAIT:本操作不阻塞

MSG_OOB:发送或者接受外带数据

MSG_PEEK:查看外来信息

MSG_WAITALL:等待所有数据 (所谓的所有数据,是以接受到fin包为准,而不是一次发送的数据)


2.readv与writev

#include "sys/uio.h"

ssize_t readv(int fiedes, const struct iovec * iov, int iovcnt);

ssize_t writev(int fiedes, const struct iovec * iov, int iovcnt);

readv writev 函数用于在 一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数成为散布读和聚集写。

       这两个函数的第二个参数是指向 iovec 结构数组的一个指针:

       struct iovec{

              void *iov_base;

              size_t iov_len;

       };

       writev 以顺序 iov[0] iov[iovcnt-1] 从缓冲区中聚集输出数据。 writev 返回输出的字节总数,通常,它应等于所有缓冲区长度之和。

       readv 则将读入的数据按上述同样顺序散布读到缓冲区中。 readv 总是先填满一个缓冲区,然后再填写 下一个。 readv 返回读到的总字节数。如果遇到文件结尾,已无数据可读,则返回 0


3.recvmsg与sendmsg函数。

相对之前的几个IO函数,这个比较麻烦,所以另开一张单独说明。



分享到:
评论

相关推荐

    Windows2000 磁盘I/O API 函数应用举例

    ### Windows2000磁盘I/O API函数应用举例 #### 概述 在Windows操作系统中,磁盘I/O操作是十分重要的一个方面,尤其是在早期的Windows2000系统中,开发人员需要掌握一系列API函数来管理和操作磁盘设备。本文通过一...

    nodejs异步IO的实现 转:http://cnodejs.org/topic/4f16442ccae1f4aa2700113b

    在传统的同步I/O模型中,程序会阻塞直到I/O操作完成,而在异步模型中,程序可以立即返回并处理其他任务,只有当I/O操作完成后,才会调用预先定义的回调函数来处理结果。 在Node.js中,异步I/O主要通过事件循环...

    重叠I/O类 代码

    在Windows中,重叠I/O主要通过`OVERLAPPED`结构体和`WSAAsyncSelect`或`WSAEventSelect`函数来实现。`OVERLAPPED`结构体包含了用于跟踪I/O操作状态的信息,如偏移量和句柄等。`WSAAsyncSelect`用于将套接字与窗口...

    异步I/O处理

    相反,异步I/O模型允许线程在发起I/O请求后立即返回,继续执行其他工作,而操作系统会在后台处理I/O操作,并在完成后通过回调函数或者事件通知线程结果。 在Linux系统中,异步I/O可以通过AIO(Asynchronous Input/...

    实验七 C++的I/O流(验证性)

    在实验中,我们使用了多种I/O函数,例如:`cout`、`cin`、`setf`、`width`、`fill`、`unsetf`等,来实现不同的输入和输出操作。同时,我们还使用了文件流的操作,例如:`ofstream`、`ifstream`等,来实现文件的读写...

    嵌入式Linux下文件I/O

    综上所述,学习嵌入式Linux下的文件I/O,不仅需要理解基本的I/O函数和标准I/O库,还需要掌握如何在有限资源的环境下进行高效的数据交换,以及如何通过库和驱动来扩展功能。提供的课件和源码将为你提供丰富的实践素材...

    windows下六种socket I/O模型示例

    阻塞I/O是最基础的模型,当调用read或write函数时,如果数据未准备好,进程会被挂起,直到数据准备好或者超时。在Windows下,创建一个默认的socket就是阻塞模式。 2. **非阻塞I/O(Non-blocking I/O)** 在非阻塞...

    IO 模型网络程序实验

    1. 同步阻塞I/O模型:这是最基础的模型,当调用read或write函数时,如果数据未准备好,进程会被挂起,直到数据准备完毕。 2. 同步非阻塞I/O模型:在这种模型中,read或write操作会立即返回,即使数据未准备好,但...

    Socket I/O 模型的使用示例

    - 重叠I/O是Windows特有的另一种异步I/O模型,使用`WSASend`和`WSARecv`函数,允许在I/O操作进行的同时执行其他计算任务。 - 通过配合I/O完成端口(IOCP)使用,可以实现高度并发的网络服务,特别适合服务器端开发...

    异步通知和异步I/O

    另一种方法是采用AIO(Asynchronous I/O)接口,它允许进程注册回调函数,当I/O完成时,内核会调用这个函数。 接下来,我们讨论"异步I/O"。异步I/O与异步通知不同,它涉及到I/O操作的整个生命周期,包括发起、执行...

    I/O复用对的实现

    3. 调用I/O复用函数(如`select`、`poll`或`epoll_wait`)进入等待状态,直到至少有一个文件描述符准备好进行I/O操作。 4. 检查返回的文件描述符集合,对每个就绪的描述符执行相应的读写操作。 5. 根据需要更新文件...

    实验8-Windows Socket I/O模型

    2) 熟悉I/O模型中使用的Winsock接口函数; 3) 掌握使用I/O模型进行网络程序设计的编程步骤; 实验要求: 在上述I/O模型中自选一个I/O模型,构建一个TCP服务器,该服务器能: 能显示客户端发来的数据 编写客户端程序,...

    I/O完成端口模型

    3. **提交I/O请求**:在需要进行读写等操作时,使用`TransmitFile`、`ReadFile`或`WriteFile`等函数,提交I/O请求。这些函数会异步执行,并将结果发送到关联的完成端口。 4. **处理完成队列**:在后台,开发者通常...

    《ORANGE’S:一个操作系统的实现》读书笔记(十九)输入输出系统(一)文章代码

    - `io.c/h`:I/O操作的通用函数,如读写设备,可能还包括I/O调度的相关代码。 - `dma.c/h`:直接存储器访问的管理代码,包括DMA通道的分配和释放等。 - `buf.c/h`:I/O缓冲区的管理,包括缓冲区的分配、填充、清空和...

    易语言I/O控件

    1. `Kernel_IOCtrl.fne`:这是一个易语言的源码文件,通常包含I/O控件的函数库或模块。在这个文件中,开发者可能定义了一系列用于与硬件设备交互的函数和过程,比如打开设备、关闭设备、读取数据、写入命令等。用户...

    如何在vb中调用i/o口的例子(10KB)

    总结来说,这个资源包提供了一个在VB中进行I/O操作的实例,包括一个可能包含I/O函数的DLL文件和一个解释如何使用这些函数的文本文件。开发者可以通过学习和应用这些示例,了解如何在VB环境中与硬件设备进行直接交互...

    I/O缓冲池演示程序

    在Windows环境中,可以利用Windows API中的I/O管理函数,如`CreateFile`、`ReadFile`和`WriteFile`,与I/O缓冲池配合工作。创建文件句柄后,通过调用这些API函数,将I/O操作与自定义的缓冲池进行关联,使得数据在...

    GLIBC中Linux异步I_O函数的实现.pdf

    《GLIBC中Linux异步I/O函数的实现》 Linux操作系统以其开源、高效和灵活性而备受推崇,尤其在系统开发领域。在Linux环境下,异步I/O(Asynchronous I/O)模式是一种提升程序效率的重要手段,它允许程序在等待I/O...

Global site tag (gtag.js) - Google Analytics