---
title: 以非阻塞方式读取文件
description: "- 以非聚合模式从单个文件指针指定的位置开始读取文件。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/userg_hyperio_0039.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/userg_hyperio_0039.html
indexId: 468f4580d7854ee1edd311f7e2b3a1d5893d2207fd5a7acdaa2d0e60253c357758
---
# 以非阻塞方式读取文件

#### 函数定义

- 以非聚合模式从单个文件指针指定的位置开始读取文件。
  MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

  PMPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

- 以聚合模式从单个文件指针指定的位置开始读取文件。
  MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

  PMPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

- 以非聚合模式显式指定的偏移量读取文件。
  MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

  PMPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

- 以聚合模式显式指定的偏移量读取文件。
  MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)

  PMPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request)


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| fh | 文件（句柄） | 非空 | 输入 |
| offset | 偏移量 | 整数 | 输入 |
| \*buf | 缓冲区的初始地址 | 非空 | 输出 |
| count | 缓冲区中的元素数 | 非负整数 | 输入 |
| datatype | 每个缓冲元素的数据类型 | 非空 | 输入 |
| \*request | request对象（句柄） | 非空 | 输出 |


#### 返回值

- 成功：返回MPI_SUCCESS。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| MPI\_ERR\_NO\_SUCH\_FILE | 文件不存在 |
| MPI\_ERR\_BAD\_FILE | 无效的文件名 |
| MPI\_ERR\_FILE | 无效文件句柄 |
| MPI\_ERR\_ARG | 其他类型的无效参数 |
| MPI\_ERR\_AMODE | 不支持的访问模式 |
| MPI\_ERR\_BUFFER | 无效buffer参数 |
| MPI\_ERR\_COUNT | 无效count参数 |
| MPI\_ERR\_TYPE | 无效类型参数 |
| MPI\_ERR\_DIMS | 维度不合理 |
| MPI\_ERR\_NO\_SPACE | 空间不足 |
| MPI\_ERR\_NO\_MEM | 内存错误 |
| MPI\_ERR\_IO | 其他I/O错误 |
| MPI\_ERR\_ACCESS | 权限被拒绝 |
| MPI\_ERR\_OTHER | 其他错误 |


#### 注意

- 中间件不存在collective与independent的严格划分。
- begin与end以file为核心进行对应，begin函数需要在调用end函数之后，才能再次调用。
- iread与read无明显区别。
- 若文件设置了视图，则读写时需要视图保持一致，且设置视图后，读写的基本单位为MPI_File_set_view / PMPI_File_set_view接口中的etype。
