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

#### 函数定义

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

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

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

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

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

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

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

  PMPI_File_iwrite_at_all(MPI_File fh, MPI_Offset offset, const 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函数之后，才能再次调用。
- 经IO Middleware拦截后， iwrite与 write两个接口在底层复用了同一套核心实现逻辑。
- 若文件设置了视图，则读写时需要视图保持一致，且设置视图后，读写的基本单位为MPI_File_set_view / PMPI_File_set_view接口中的etype。
