最早使用的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函数应用举例 #### 概述 在Windows操作系统中,磁盘I/O操作是十分重要的一个方面,尤其是在早期的Windows2000系统中,开发人员需要掌握一系列API函数来管理和操作磁盘设备。本文通过一...
在传统的同步I/O模型中,程序会阻塞直到I/O操作完成,而在异步模型中,程序可以立即返回并处理其他任务,只有当I/O操作完成后,才会调用预先定义的回调函数来处理结果。 在Node.js中,异步I/O主要通过事件循环...
在Windows中,重叠I/O主要通过`OVERLAPPED`结构体和`WSAAsyncSelect`或`WSAEventSelect`函数来实现。`OVERLAPPED`结构体包含了用于跟踪I/O操作状态的信息,如偏移量和句柄等。`WSAAsyncSelect`用于将套接字与窗口...
相反,异步I/O模型允许线程在发起I/O请求后立即返回,继续执行其他工作,而操作系统会在后台处理I/O操作,并在完成后通过回调函数或者事件通知线程结果。 在Linux系统中,异步I/O可以通过AIO(Asynchronous Input/...
在实验中,我们使用了多种I/O函数,例如:`cout`、`cin`、`setf`、`width`、`fill`、`unsetf`等,来实现不同的输入和输出操作。同时,我们还使用了文件流的操作,例如:`ofstream`、`ifstream`等,来实现文件的读写...
综上所述,学习嵌入式Linux下的文件I/O,不仅需要理解基本的I/O函数和标准I/O库,还需要掌握如何在有限资源的环境下进行高效的数据交换,以及如何通过库和驱动来扩展功能。提供的课件和源码将为你提供丰富的实践素材...
阻塞I/O是最基础的模型,当调用read或write函数时,如果数据未准备好,进程会被挂起,直到数据准备好或者超时。在Windows下,创建一个默认的socket就是阻塞模式。 2. **非阻塞I/O(Non-blocking I/O)** 在非阻塞...
1. 同步阻塞I/O模型:这是最基础的模型,当调用read或write函数时,如果数据未准备好,进程会被挂起,直到数据准备完毕。 2. 同步非阻塞I/O模型:在这种模型中,read或write操作会立即返回,即使数据未准备好,但...
- 重叠I/O是Windows特有的另一种异步I/O模型,使用`WSASend`和`WSARecv`函数,允许在I/O操作进行的同时执行其他计算任务。 - 通过配合I/O完成端口(IOCP)使用,可以实现高度并发的网络服务,特别适合服务器端开发...
另一种方法是采用AIO(Asynchronous I/O)接口,它允许进程注册回调函数,当I/O完成时,内核会调用这个函数。 接下来,我们讨论"异步I/O"。异步I/O与异步通知不同,它涉及到I/O操作的整个生命周期,包括发起、执行...
3. 调用I/O复用函数(如`select`、`poll`或`epoll_wait`)进入等待状态,直到至少有一个文件描述符准备好进行I/O操作。 4. 检查返回的文件描述符集合,对每个就绪的描述符执行相应的读写操作。 5. 根据需要更新文件...
2) 熟悉I/O模型中使用的Winsock接口函数; 3) 掌握使用I/O模型进行网络程序设计的编程步骤; 实验要求: 在上述I/O模型中自选一个I/O模型,构建一个TCP服务器,该服务器能: 能显示客户端发来的数据 编写客户端程序,...
3. **提交I/O请求**:在需要进行读写等操作时,使用`TransmitFile`、`ReadFile`或`WriteFile`等函数,提交I/O请求。这些函数会异步执行,并将结果发送到关联的完成端口。 4. **处理完成队列**:在后台,开发者通常...
- `io.c/h`:I/O操作的通用函数,如读写设备,可能还包括I/O调度的相关代码。 - `dma.c/h`:直接存储器访问的管理代码,包括DMA通道的分配和释放等。 - `buf.c/h`:I/O缓冲区的管理,包括缓冲区的分配、填充、清空和...
1. `Kernel_IOCtrl.fne`:这是一个易语言的源码文件,通常包含I/O控件的函数库或模块。在这个文件中,开发者可能定义了一系列用于与硬件设备交互的函数和过程,比如打开设备、关闭设备、读取数据、写入命令等。用户...
总结来说,这个资源包提供了一个在VB中进行I/O操作的实例,包括一个可能包含I/O函数的DLL文件和一个解释如何使用这些函数的文本文件。开发者可以通过学习和应用这些示例,了解如何在VB环境中与硬件设备进行直接交互...
在Windows环境中,可以利用Windows API中的I/O管理函数,如`CreateFile`、`ReadFile`和`WriteFile`,与I/O缓冲池配合工作。创建文件句柄后,通过调用这些API函数,将I/O操作与自定义的缓冲池进行关联,使得数据在...
《GLIBC中Linux异步I/O函数的实现》 Linux操作系统以其开源、高效和灵活性而备受推崇,尤其在系统开发领域。在Linux环境下,异步I/O(Asynchronous I/O)模式是一种提升程序效率的重要手段,它允许程序在等待I/O...