
# 创建并行文件系统(C SDK)
![](https://support.huaweicloud.com/sdk-c-devg-obs/public_sys-resources/notice_3.0-zh-cn.png)
开发过程中，您有任何问题可以在GitHub上[提交issue](https://github.com/huaweicloud/huaweicloud-sdk-c-obs/issues)，或者在[华为云对象存储服务论坛](https://bbs.huaweicloud.com/forum/forum-620-1.html)中发帖求助。
OBS并行文件系统是对象的容器，您上传的文件都将以对象的形式存放在并行文件系统中。本文介绍如何使用C SDK创建并行文件系统。
调用创建并行文件系统接口，将在当前账号按照用户指定的并行文件系统名创建一个新并行文件系统，接口支持根据用户诉求，在创建并行文件系统的同时配置并行文件系统的存储类别、区域及并行文件系统的访问权限等参数。
#### 接口约束
- 您必须拥有obs:bucket:CreateBucket权限，才能创建并行文件系统。建议使用IAM进行授权，配置方式详见[使用IAM自定义策略](https://support.huaweicloud.com/usermanual-obs/obs_03_0121.html)。
- OBS支持的region以及region与endPoint的对应关系，详细信息请参见[地区与终端节点](https://developer.huaweicloud.com/endpoint?OBS)。
  创建并行文件系统时，如果初始化客户端使用的终端节点（endPoint）为"obs.myhuaweicloud.com"，则可以不指定并行文件系统所在区域（location），系统会自动在华北-北京一（cn-north-1）创建并行文件系统；如果初始化客户端使用的终端节点（endPoint）不是obs.myhuaweicloud.com，则必须指定并行文件系统所在区域（location），且指定的区域必须与终端节点（endPoint）区域一致，否则会返回状态码400。
  比如初始化时使用的终端节点endPoint是obs.cn-north-4.myhuaweicloud.com，那么在创建并行文件系统的时候必须指定Location：cn-north-4 才会创建成功，否则会返回状态码400。
  
- 同一账号下，可以创建多个并行文件系统，数量上限是100个（不区分地域），并行文件系统中的对象数量和大小没有限制。
- 新创建并行文件系统的并行文件系统名在OBS中必须是唯一的。如果是同一个用户重复创建同一区域的同名并行文件系统时返回HTTP状态码200。除此以外的其他场景重复创建同名并行文件系统返回HTTP状态码409，表明并行文件系统已存在。
- 用户删除并行文件系统后，需要等待30分钟才能创建同名并行文件系统。
- 并不是所有区域都支持创建多AZ并行文件系统，您可以在[产品价格详情](https://www.huaweicloud.com/pricing.html?tab=detail#/obs)页面，查询指定区域是否支持多AZ。
 
#### 方法定义
```
void create_pfs_bucket(const obs_options *options, obs_canned_acl canned_acl, const char *location_constraint, 
        obs_response_handler *handler, void *callback_data)
```
#### 请求参数说明
表1请求参数列表 
| **参数名称**            | **参数类型**                                                                                                              | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| options             | const [obs_options](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0085.html#obs_20_0085__table9681927859) \*  | 必选       | **参数解释** **：** 请求并行文件系统的上下文，[配置option(C SDK)](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0203.html)，通过obs_options设置AK、SK、endpoint、bucket、超时时间、临时鉴权。 **约束限制：** 无                                                                                                                                                                                                                                                                                                              |
| canned_acl          | [obs_canned_acl](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0089.html#obs_20_0089__table49057657)          | 必选       | **参数解释** **：** 并行文件系统的访问控制列表（Access Control List，ACL）。 **约束限制：** 无 **取值范围：** 可详见[obs_canned_acl](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table49057657)。                                                                                                                                                                                                                          |
| location_constraint | char \*                                                                                                               | 可选       | **参数解释** **：** 并行文件系统所在的区域。 **约束限制：** 该参数定义了并行文件系统将会被创建在哪个区域，如果使用的终端节点是obs.myhuaweicloud.com，可以不携带此参数；如果使用的终端节点不是obs.myhuaweicloud.com，则必须携带此参数。 **取值范围：** 当前有效的OBS区域和终端节点的更多信息，请参考[地区和终端节点](https://developer.huaweicloud.com/endpoint?OBS)。终端节点即调用API的请求地址，不同服务不同区域的终端节点不同，您可以向企业管理员获取区域和终端节点信息。 **默认取值：** 终端节点为obs.myhuaweicloud.com且用户未设定区域时，默认为华北-北京一（cn-north-1）。 |
| handler             | [obs_response_handler](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table53755070) \* | 必选       | **参数解释：** 回调结构体，结构体内所有成员都是回调函数的指针，用于设置处理接口响应数据的回调函数。您可以通过设置回调函数，把服务端的响应数据复制到您的自定义回调数据callback_data中。 **约束限制：** 无                                                                                                                                                                                                                                                                                                                                                                      |
| callback_data       | void \*                                                                                                               | 可选       | **参数解释：** 用户自定义回调数据。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                 |
   
表2obs_options 
| **参数名称**        | **参数类型**                                                                                                                    | **是否必选** | **描述**                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| bucket_options  | [obs_bucket_context](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table14455523)            | 必选       | **参数解释：** 并行文件系统相关设置。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                |
| request_options | [obs_http_request_option](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table16768122191719) | 必选       | **参数解释：** 请求相关设置。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                      |
| temp_auth       | [temp_auth_configure](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table1427813134518)\*    | 可选       | **参数解释：** 用于临时计算签名的结构体，不使用时请设置为NULL。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
   
表3obs_canned_acl 
| **常量名**                                    | **原始值**                     | **说明**                                                                                                                                                                                                         |
|:---|:---|:---|
| OBS_CANNED_ACL_PRIVATE                     | private                     | 私有读写，桶或对象的所有者拥有完全控制的权限，其他任何人都没有访问权限。                                                                                                                                                                           |
| OBS_CANNED_ACL_PUBLIC_READ                 | public-read                 | 公共读私有写，设在桶上，所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。设在对象上，所有人可以获取该对象内容和元数据。                                                                                                                                          |
| OBS_CANNED_ACL_PUBLIC_READ_WRITE           | public-read-write           | 公共读写，设在桶上，所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、复制段、取消多段上传任务。设在对象上，所有人可以获取该对象内容和元数据。                                                                                                            |
| OBS_CANNED_ACL_BUCKET_OWNER_FULL_CONTROL   | bucket-owner-full-control   | 设在对象上，桶和对象的所有者拥有对象的完全控制权限，其他任何人都没有访问权限。默认情况下，上传对象至其他用户的桶中，桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后，桶所有者可以完全控制对象。例如，用户A上传对象x至用户B的桶中，系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control策略后，用户B就拥有了对象x的控制权。仅S3 API支持。 |
| OBS_CANNED_ACL_PUBLIC_READ_DELIVERED       | public-read-delivered       | 桶公共读，桶内对象公共读，设在桶上，所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据，可以获取该桶内对象的内容和元数据。不能应用于对象。                                                                                                                                        |
| OBS_CANNED_ACL_PUBLIC_READ_WRITE_DELIVERED | public-read-write-delivered | 桶公共读写，桶内对象公共读写，设在桶上，所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、复制段、取消多段上传任务，可以获取该桶内对象的内容和元数据。不能应用于对象。                                                                                                |
   
表4obs_response_handler 
| **参数名称**            | **参数类型**                                                                                                                              | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| properties_callback | [obs_response_properties_callback](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table122311540152) \* | 必选       | **参数解释：** 响应回调函数指针，可以在这个回调中把[obs_response_properties](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table13287123911192)的内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无                                                                                                      |
| complete_callback   | [obs_response_complete_callback](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table1396057131511) \*  | 必选       | **参数解释：** 结束回调函数指针，可以在这个回调中把[obs_status](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table9663191913320)和[obs_error_details](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table41273509163)的内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无 |
   
表5obs_bucket_context 
| **参数名称**          | **参数类型**                                                                                                            | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| host_name         | char \*                                                                                                             | 必选       | **参数解释** **：** 连接OBS的服务地址，请求使用的主机名，是指存放资源的服务器的域名，就是终端节点endpoint。 示例：host_name = "obs.cn-north-4.myhuaweicloud.com";   **约束限制：** 不需要带"http://"或"https://"前缀，通过[obs_protocol](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table188950305353)控制是使用http协议还是https协议。 **取值范围：** 您可以从[这里](https://developer.huaweicloud.com/endpoint?OBS)查看OBS当前开通的服务地址。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                       |
| bucket_name       | char \*                                                                                                             | 必选       | **参数解释** **：** 并行文件系统名。 **约束限制：** - 并行文件系统的名字需全局唯一，不能与已有的任何并行文件系统名称重复，包括其他用户创建的并行文件系统。  - 并行文件系统命名规则如下： - 3～63个字符，数字或字母开头，支持小写字母、数字、"-"、"."。  - 禁止使用IP地址。  - 禁止以"-"或"."开头及结尾。  - 禁止两个"."相邻（如："my..bucket"）。  - 禁止"."和"-"相邻（如："my-.bucket"和"my.-bucket"）。    - 同一用户在同一个区域多次创建同名并行文件系统不会报错，创建的并行文件系统属性以第一次请求为准。   **默认取值：** 无 |
| useCname          | bool                                                                                                                | 可选       | **参数解释** **：** 是否通过自定义域名访问OBS服务。 **约束限制：** 无 **取值范围：** true：通过自定义域名访问OBS服务。 false：不通过自定义域名访问OBS服务。 **默认取值：** false                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| protocol          | [obs_protocol](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table188950305353)      | 可选       | **参数解释** **：** 是使用http协议还是https协议。 **约束限制：** 无 **取值范围：** 可详见[obs_protocol](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table188950305353)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| access_key        | char \*                                                                                                             | 必选       | **参数解释：** 访问密钥中的AK。 **约束限制：** 无 **取值范围：** 可详见[创建访问密钥](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0102.html#obs_20_0102__l9411f8847bda4bb18a00b996423f8ee7)。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| secret_access_key | char \*                                                                                                             | 必选       | **参数解释：** 访问密钥中的SK。 **约束限制：** 无 **取值范围：** 可详见[创建访问密钥](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0102.html#obs_20_0102__l9411f8847bda4bb18a00b996423f8ee7)。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| storage_class     | [obs_storage_class](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table850455217510) | 可选       | **参数解释** **：** 创并行文件系统时可指定的并行文件系统的存储类型。 **约束限制：** 无 **取值范围：** 可详见[obs_storage_class](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table850455217510)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| token             | char \*                                                                                                             | 可选       | **参数解释：** 临时访问密钥中的SecurityToken。 **约束限制：** 无 **取值范围：** 可详见[创建访问密钥](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0102.html#obs_20_0102__l9411f8847bda4bb18a00b996423f8ee7)。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| epid              | char \*                                                                                                             | 可选       | **参数解释** **：** 创并行文件系统时可指定的企业项目ID，开通企业项目的用户可以从企业项目服务获取。 **约束限制：** epid格式为uuid，未开通企业项目的用户可以不带该头域。 示例：9892d768-2d13-450f-aac7-ed0e44c2585f **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   
表6obs_storage_class 
| 常量名                            | 原始值          | 说明                                                                                                                                        |
|:---|:---|:---|
| OBS_STORAGE_CLASS_STANDARD     | STANDARD     | 标准存储。 标准存储拥有低访问时延和较高的吞吐量，适用于有大量热点对象（平均一个月多次）或小对象（\<1MB），且需要频繁访问数据的业务场景。 |
| OBS_STORAGE_CLASS_STANDARD_IA  | STANDARD_IA  | 低频访问存储。 低频访问存储适用于不频繁访问（平均一年少于12次）但在需要时也要求能够快速访问数据的业务场景。                 |
| OBS_STORAGE_CLASS_GLACIER      | GLACIER      | 归档存储。 归档存储适用于很少访问（平均一年访问一次）数据的业务场景。                                     |
| OBS_STORAGE_CLASS_DEEP_ARCHIVE | DEEP_ARCHIVE | 深度归档存储 适用于长期不访问（平均几年访问一次）数据的业务场景。                                        |
   
表7obs_protocol 
| **常量名**            | **原始值** | **说明**       |
|:---|:---|:---|
| OBS_PROTOCOL_HTTPS | https   | 使用https协议访问。 |
| OBS_PROTOCOL_HTTP  | http    | 使用http协议访问。  |
   
表8obs_http_request_option 
| **参数名称**           | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| connect_time       | int      | 必选       | **参数解释** **：** 建立HTTP/HTTPS连接的超时时间（单位：毫秒）。 **约束限制：** 无 **取值范围：** \[10000, 60000\] **默认取值：** 60000 |
| max_connected_time | int      | 必选       | **参数解释** **：** 请求超时时间（单位：秒）。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 0（指永远不会主动断开连接）                         |
| proxy_auth         | char\*   | 可选       | **参数解释** **：** 代理认证信息，格式为username:password。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                        |
| proxy_host         | char\*   | 可选       | **参数解释** **：** 代理服务器的IP地址或主机名。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                |
   
表9temp_auth_configure 
| **参数名称**           | **参数类型**                                                                                                                                                                                                                                                                                                                                                                                                                                | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| expires            | long long int                                                                                                                                                                                                                                                                                                                                                                                                                           | 必选       | **参数解释：** 临时鉴权的有效期（单位：秒）。 **约束限制：** 无 **取值范围：** \[0-630720000\] **默认取值**： 无 |
| temp_auth_callback | void (\*[temp_auth_callback](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table2096266165411))(char \*temp_auth_url, uint64_t temp_auth_url_len, char\*temp_auth_headers, uint64_t temp_auth_headers_len, void\*callback_data) | 必选       | **参数解释：** 用户自定义回调函数指针，用于将临时url以及涉及的计算签名头域记录到用户自定义回调数据中。 **约束限制：** 无                                                                                                                                                                             |
| callback_data      | void \*                                                                                                                                                                                                                                                                                                                                                                                                                                 | 必选       | **参数解释：** 用户自定义回调数据。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无             |
   
表10temp_auth_callback 
| **参数名称**              | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| temp_auth_url         | char \*  | 必选       | **参数解释：** 临时鉴权的URL。OBS服务支持用户构造一个特定操作的URL，这个URL的Query参数中会包含用户AK、签名、有效期等信息，任何拿到这个URL的人均可执行临时鉴权操作，OBS服务收到这个请求后认为该请求就是签发URL用户自己在执行操作。例如构造一个携带签名信息的下载对象的URL，拿到相应URL的人都能下载这个对象，但该URL只在Expires指定的失效时间内有效。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无 |
| temp_auth_url_len     | uint64_t | 必选       | **参数解释：** 临时鉴权的URL的长度。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                               |
| temp_auth_headers     | char \*  | 必选       | **参数解释：** 临时鉴权的headers。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                            |
| temp_auth_headers_len | uint64_t | 必选       | **参数解释：** 临时鉴权headers的缓冲区长度（字节数）。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                 |
| callback_data         | void \*  | 必选       | **参数解释：** 用户自定义回调数据。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                  |
   
表11obs_response_properties_callback 
| **参数名称**      | **参数类型**                                                                                                                            | **是否必选** | **描述**                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|
| properties    | const [obs_response_properties](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table13287123911192)\* | 必选       | **参数解释：** 响应头域中的参数，建议将其内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无                                                                                                                 |
| callback_data | void \*                                                                                                                             | 必选       | **参数解释：** 用户自定义回调数据指针。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无 |
   
表12obs_response_complete_callback 
| **参数名称**      | **参数类型**                                                                                                                   | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|:---|
| status        | [obs_status](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table9663191913320)              | 必选       | **参数解释：** SDK内部的请求状态码。 **约束限制：** 无 **取值范围：** 可详见[obs_status](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table9663191913320)。 |
| error_details | const [obs_error_details](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table41273509163)\* | 必选       | **参数解释：** 响应回调函数指针，可以在这个回调中把properties的内容记录到callback_data（用户自定义回调数据)中。 **约束限制：** 无                                                                                                                                         |
| callback_data | void \*                                                                                                                    | 必选       | **参数解释：** 用户自定义回调数据指针。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                |
   
表13obs_response_properties 
| **参数名称**                   | **参数类型**                                                                                                                  | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| request_id                 | const char \*                                                                                                             | 可选       | **参数解释：** 由OBS创建来唯一确定本次请求的值，可以通过该值来定位问题。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| request_id2                | const char \*                                                                                                             | 可选       | **参数解释：** 帮助定位问题的特殊符号。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| content_type               | const char \*                                                                                                             | 可选       | **参数解释：** 对象的文件类型（MIME类型）。Content-Type（MIME）用于标识发送或接收数据的类型，浏览器根据该参数来决定数据的打开方式。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| content_length             | uint64_t                                                                                                                  | 可选       | **参数解释：** 响应消息体的字节长度。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| server                     | const char \*                                                                                                             | 可选       | **参数解释：** HTTP请求中的Server头域。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| etag                       | const char \*                                                                                                             | 可选       | **参数解释：** 对象的base64编码的128位MD5摘要。ETag是对象内容的唯一标识，可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A，下载对象时ETag为B，则说明对象内容发生了变化。ETag只反映变化的内容，而不是其元数据。上传的对象或复制操作创建的对象，都有唯一的ETag。 **约束限制：** 当对象是服务端加密的对象时，ETag值不是对象的MD5值。 **取值范围：** 长度为32的字符串。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| expiration                 | const char \*                                                                                                             | 可选       | **参数解释：** 对象的详细过期信息。 **约束限制：** 无 **取值范围：** ISO 8601 格式的时间字符串，如"Web, 7 Nov 2012 00:00:00 GMT"。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| website_redirect_location  | const char \*                                                                                                             | 可选       | **参数解释：** 当并行文件系统设置了Website配置，就可以设置对象元数据的这个属性，Website接入点返回301重定向响应，将获取这个对象的请求重定向到该属性指定的并行文件系统内另一个对象或一个外部的URL，该参数指明对象的重定向地址。 例如，重定向请求到桶内另一对象： x-obs-website-redirect-location:/anotherPage.html 或重定向请求到一个外部URL： x-obs-website-redirect-location:http://www.example.com/ OBS将这个值从头域中取出，保存在对象的元数据"WebsiteRedirectLocation"中。 **约束限制：** - 必须以"/"、"http://"或"https://"开头，长度不超过2KB。  - OBS仅支持为并行文件系统根目录下的对象设置重定向，不支持为并行文件系统中文件夹下的对象设置重定向。   **取值范围：** 无 **默认取值：** 无 |
| version_id                 | const char \*                                                                                                             | 可选       | **参数解释：** 对象的版本号。如果该对象无版本号，则为NULL。 **约束限制：** 无 **取值范围：** 长度为32的字符串。 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| meta_data_count            | int                                                                                                                       | 可选       | **参数解释：** meta_data数组中的元素个数。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| meta_data                  | const [obs_name_value](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0087.html#obs_20_0087__table214412614302) \* | 可选       | **参数解释：** 对象的自定义元数据。OBS支持用户使用以"x-obs-meta-"开头的消息头来加入自定义的元数据，以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时，加入的自定义元数据将会在返回的消息头中出现。 **约束限制：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| use_server_side_encryption | char                                                                                                                      | 可选       | **参数解释：** 如果开启了服务端加密，会被置为'\\1'。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| allow_origin               | const char \*                                                                                                             | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求中的Origin满足服务端的CORS配置，则在响应中包含这个Origin。 **约束限制：** 无 **取值范围：** 符合CORS协议的取值范围。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| allow_headers              | const char \*                                                                                                             | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求的headers满足服务端的CORS配置，则在响应中包含这个headers。 **约束限制：** 最多可填写一个"\*"通配符，不支持\&、:、\<、空格以及中文字符。 **取值范围：** 符合CORS协议的取值范围。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| max_age                    | const char \*                                                                                                             | 可选       | **参数解释：** 桶CORS规则中的MaxAgeSeconds。MaxAgeSeconds指请求来源的客户端可以对跨域请求返回结果的缓存时间。 **约束限制：** 每个CORSRule可以包含至多一个MaxAgeSeconds。 **取值范围：** 大于等于0的整型数，单位：秒。 **默认取值：** 3000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| allow_methods              | const char \*                                                                                                             | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求的Access-Control-Request-Method满足服务端的CORS配置，则在响应中包含这条rule中的Methods。 **约束限制：** 无 **取值范围：** - GET  - PUT  - HEAD  - POST  - DELETE   **默认取值：** 无                                                                                                                                                                                                                                                           |
| expose_headers             | const char \*                                                                                                             | 可选       | **参数解释：** 桶CORS规则中的ExposeHeader。ExposeHeader是指CORS规则允许响应中可返回的附加头域，给客户端提供额外的信息。默认情况下浏览器只能访问以下头域：Content-Length、Content-Type，如果需要访问其他头域，需要在附加头域中配置。 **约束限制：** 不支持\*、\&、:、\<、空格以及中文字符。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| storage_class              | const char \*                                                                                                             | 可选       | **参数解释：** 对象的存储类别。 **约束限制：** 仅当对象为非标准存储类别时，会返回此头域。 **取值范围：** - WARM（指低频存储）  - COLD（指归档存储）  - DEEP_ARCHIVE（指深度归档存储）   **默认取值：** 无                                                                                                                                                                                                                                                                                                      |
| server_side_encryption     | const char \*                                                                                                             | 可选       | **参数解释：** 该头域表示服务端的加密方式。 示例：x-obs-server-side-encryption：kms **约束限制：** 如果服务端加密是SSE-KMS方式，响应包含该头域。 **取值范围：** - kms（指SSE-KMS加密方式）  - obs（指SSE-OBS加密方式）   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                            |
| kms_key_id                 | const char \*                                                                                                             | 可选       | **参数解释：** 密钥ID。当加密方式为SSE-KMS且使用指定密钥加密时，需输入密钥ID。 **约束限制：** 当您设置了server_side_encryption且赋值为"kms"，即选择kms加密方式时，才能使用该头域指定加密密钥。 **取值范围：** 密钥ID获取方法请参见[查看密钥](https://support.huaweicloud.com/usermanual-dew/dew_01_0179.html)。 **默认取值：** 当您选择使用kms加密方式，但未设置此头域时，默认的主密钥将会被使用。如果默认主密钥不存在，系统将默认创建并使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| customer_algorithm         | const char \*                                                                                                             | 可选       | **参数解释：** 该头域表示解密使用的算法。 **约束限制：** 如果服务端加密是SSE-C方式，响应包含该头域。 **取值范围：** AES256（指AES256解密算法） **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| customer_key_md5           | const char \*                                                                                                             | 可选       | **参数解释：** 该头域表示解密使用的密钥的MD5值。 **约束限制：** - 如果服务端加密是SSE-C方式，响应包含该头域。  - 由密钥值经过MD5加密再经过Base64编码后得到，示例：4XvB3tbNTN+tIEVa0/fGaQ==。   **取值范围：** 密钥ID MD5的base64值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| bucket_location            | const char \*                                                                                                             | 可选       | **参数解释：** 桶的区域位置信息。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| obs_version                | const char \*                                                                                                             | 可选       | **参数解释：** 桶所在的OBS服务版本号。 **约束限制：** 无 **取值范围：** - 3.0：最新版本的桶。  - --：表示老版本的桶。   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| restore                    | const char \*                                                                                                             | 可选       | **参数解释：** 标识对象的恢复状态。 示例：正在恢复ongoing-request="true"；已恢复 ongoing-request="false", expiry-date="Wed, 7 Nov 2012 00:00:00 GMT"。其中expiry-date表示对象恢复后的失效时间。 **约束限制：** 仅当对象为归档存储或深度归档存储类别，并且处于正在恢复或已经恢复时，会返回此头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| obs_object_type            | const char \*                                                                                                             | 可选       | **参数解释：** 对象的类型。 **约束限制：** 仅当对象为非Normal对象时，会返回此头域。 **取值范围：** Appendable **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| obs_next_append_position   | const char \*                                                                                                             | 可选       | **参数解释：** 指明下一次请求应该提供的position。 **约束限制：** 仅当对象为Appendable对象时，会返回此头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| obs_head_epid              | const char \*                                                                                                             | 可选       | **参数解释：** 当前桶的企业项目ID，开通企业项目的用户可以从企业项目服务获取。 **约束限制：** 格式为uuid，未开通企业项目的用户可以不带该头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| reserved_indicator         | const char \*                                                                                                             | 可选       | **参数解释：** 帮助定位问题的特殊符号。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   
表14obs_error_details 
| **参数名称**            | **参数类型**                                                                                                           | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| message             | const char\*                                                                                                       | **参数解释：** 错误响应消息体XML中具体错误更全面、详细的英文解释。 **约束限制：** 无 **取值范围：** 取值范围可参见[错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html)。 **默认取值：** 无 |
| resource            | const char\*                                                                                                       | **参数解释：** 该错误相关的并行文件系统或对象资源。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                         |
| further_details     | const char\*                                                                                                       | **参数解释：** 错误响应消息体XML中的FurtherDetails元素的值。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                       |
| extra_details_count | int                                                                                                                | **参数解释：** 错误响应消息体XML中的其他元素的数量。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                       |
| extra_details       | [obs_name_value](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0301.html#obs_20_0301__table214412614302)\* | **参数解释：** 错误响应消息体XML中的其他元素的值。 **约束限制：** 无                                                                                                                                                                                                                                                                                                                                        |
| error_headers_count | int                                                                                                                | **参数解释：** error_headers的头域数量。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                        |
| error_headers       | char\*\*                                                                                                           | **参数解释：** 响应头域中包含error的所有头域。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                      |
   
表15obs_name_value 
| **参数名称** | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| name     | char \*  | 可选       | **参数解释：** 属性的键。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无  |
| value    | char \*  | 可选       | **参数解释：** 属性的值。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
   
表16obs_status 
| **常量名**                               | **原始值** | **说明**                                                                                    |
|:---|:---|:---|
| OBS_STATUS_OK                         | 0       | 请求成功。                                                                                     |
| OBS_STATUS_InitCurlFailed             | 1       | 初始化curl失败。                                                                                |
| OBS_STATUS_InternalError              | 2       | 内部错误。                                                                                     |
| OBS_STATUS_OutOfMemory                | 3       | 本地环境内存不足。                                                                                 |
| OBS_STATUS_FailedToIInitializeRequest | 6       | 初始化请求失败。                                                                                  |
| OBS_STATUS_XmlParseFailure            | 23      | xml解析失败。                                                                                  |
| OBS_STATUS_NameLookupError            | 33      | 域名解析失败。                                                                                   |
| OBS_STATUS_FailedToConnect            | 34      | 无法连接到服务端。                                                                                 |
| OBS_STATUS_ConnectionFailed           | 36      | 网络连接失败。                                                                                   |
| OBS_STATUS_PartialFile                | 38      | 网络传输中断。                                                                                   |
| OBS_STATUS_InvalidParameter           | 39      | 参数非法。                                                                                     |
| OBS_STATUS_NoToken                    | 40      | 当前并发数已经超过最大并发数（默认值1000）。此处的Token指并发请求令牌，非安全认证令牌。可通过set_online_request_max_count函数调整最大并发数。 |
| OBS_STATUS_OpenFileFailed             | 41      | 打开文件失败。                                                                                   |
| OBS_STATUS_AccessDenied               | 43      | 请求被拒绝。                                                                                    |
| OBS_STATUS_MalformedPolicy            | 44      | 请求policy格式不正确。                                                                            |
| OBS_STATUS_MalformedXML               | 45      | 请求xml格式不正确。                                                                               |
| OBS_STATUS_MethodNotAllowed           | 46      | 请求方法不允许。                                                                                  |
| OBS_STATUS_SignatureDoesNotMatch      | 47      | 签名不匹配，检查ak、sk、token是否对应或有误。                                                               |
| OBS_STATUS_ServiceUnavailable         | 48      | 服务端异常。                                                                                    |
| OBS_STATUS_SlowDown                   | 49      | 请求频率过快。                                                                                   |
   
#### 代码示例
以下示例展示如何新建一个并行文件系统：
```
#include "eSDKOBS.h"
#include <stdio.h>
#include <time.h>
// 响应回调函数，可以在这个回调中把properties的内容记录到callback_data(用户自定义回调数据)中
obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data);
// 结束回调函数，可以在这个回调中把obs_status和obs_error_details的内容记录到callback_data(用户自定义回调数据)中
void response_complete_callback(obs_status status, const obs_error_details *error, void *callback_data);
int main()
{
    // 以下示例展示如何新建一个并行文件系统：
    // 在程序入口调用obs_initialize方法来初始化网络、内存等全局资源。
    obs_status ret_status = obs_initialize(OBS_INIT_ALL);
    if (OBS_STATUS_OK != ret_status)
    {
        printf("obs_initialize failed(%s).\n", obs_get_status_name(ret_status));
        return -1;
    }
    obs_options options;
    // 创建并初始化options，该参数包括访问域名(host_name)、访问密钥（access_key_id和access_key_secret）、桶名(bucket_name)、桶存储类别(storage_class)等配置信息
    init_obs_options(&options);
    // host_name填写并行文件系统所在的endpoint, 此处以华北-北京四为例，其他地区请按实际情况填写。
    options.bucket_options.host_name = "obs.cn-north-4.myhuaweicloud.com";
    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
    // 本示例以ak和sk保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY。
    options.bucket_options.access_key = getenv("ACCESS_KEY_ID");
    options.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY");
    // 填写Bucket名称，例如example-bucket-name。
    char * bucket_name = "example-bucket-name";
    // 设置桶区域位置（以区域为华北-北京四为例），bucket_location需要与endpoint的位置信息一致。
    char *bucket_location = "cn-north-4";
    options.bucket_options.bucket_name = bucket_name;
    obs_response_handler response_handler = { &response_properties_callback, &response_complete_callback };
    // 设置并行文件系统的存储类别，此处以标准存储为例
    options.bucket_options.storage_class = OBS_STORAGE_CLASS_STANDARD;
    // 设置并行文件系统ACL
    obs_canned_acl bucket_acl = OBS_CANNED_ACL_PRIVATE;
    ret_status = OBS_STATUS_BUTT;
    // 新建一个并行文件系统
    create_pfs_bucket(&options, bucket_acl, bucket_location, &response_handler, &ret_status);
    // 判断请求是否成功
    if (ret_status == OBS_STATUS_OK) {
        printf("create bucket %s successfully. \n", bucket_name);
    } else {
        printf("create bucket %s failed(%s).\n", bucket_name, obs_get_status_name(ret_status));
    }
    // 释放分配的全局资源
    obs_deinitialize();
}
// 响应回调函数，可以在这个回调中把properties的内容记录到callback_data(用户自定义回调数据)中
obs_status response_properties_callback(const obs_response_properties *properties, void *callback_data)
{
    if (properties == NULL)
    {
        printf("error! obs_response_properties is null!");
        return OBS_STATUS_OK;      
    }
// 打印响应信息
#define print_nonnull(name, field)                                 \
    do {                                                           \
        if (properties-> field) {                                  \
            printf("%s: %s\n", name, properties->field);          \
        }                                                          \
    } while (0)
    print_nonnull("request_id", request_id);
    print_nonnull("request_id2", request_id2);
    print_nonnull("content_type", content_type);
    if (properties->content_length) {
        printf("content_length: %llu\n", properties->content_length);
    }
    print_nonnull("server", server);
    print_nonnull("ETag", etag);
    print_nonnull("expiration", expiration);
    print_nonnull("website_redirect_location", website_redirect_location);
    print_nonnull("version_id", version_id);
    print_nonnull("allow_origin", allow_origin);
    print_nonnull("allow_headers", allow_headers);
    print_nonnull("max_age", max_age);
    print_nonnull("allow_methods", allow_methods);
    print_nonnull("expose_headers", expose_headers);
    print_nonnull("storage_class", storage_class);
    print_nonnull("server_side_encryption", server_side_encryption);
    print_nonnull("kms_key_id", kms_key_id);
    print_nonnull("customer_algorithm", customer_algorithm);
    print_nonnull("customer_key_md5", customer_key_md5);
    print_nonnull("bucket_location", bucket_location);
    print_nonnull("obs_version", obs_version);
    print_nonnull("restore", restore);
    print_nonnull("obs_object_type", obs_object_type);
    print_nonnull("obs_next_append_position", obs_next_append_position);
    print_nonnull("obs_head_epid", obs_head_epid);
    print_nonnull("reserved_indicator", reserved_indicator);
    int i;
    for (i = 0; i < properties->meta_data_count; i++) {
        printf("x-obs-meta-%s: %s\n", properties->meta_data[i].name,
            properties->meta_data[i].value);
    }
    return OBS_STATUS_OK;
}
// 结束回调函数，可以在这个回调中把obs_status和obs_error_details的内容记录到callback_data(用户自定义回调数据)中
void response_complete_callback(obs_status status, const obs_error_details *error, void *callback_data)
{
    if (callback_data) {
        obs_status *ret_status = (obs_status *)callback_data;
        *ret_status = status;
    } else {
        printf("Callback_data is NULL");
    }
    if (error && error->message) {
        printf("Error Message: \n   %s\n", error->message);
    }
    if (error && error->resource) {
        printf("Error Resource: \n  %s\n", error->resource);
    }
    if (error && error->further_details) {
        printf("Error further_details: \n   %s\n", error->further_details);
    }
    if (error && error->extra_details_count) {
        int i;
        for (i = 0; i < error->extra_details_count; i++) {
            printf("Error Extra Detail(%d):\n   %s:%s\n", i, error->extra_details[i].name,
                   error->extra_details[i].value);
        }
    }
    if (error && error->error_headers_count) {
        int i;
        for (i = 0; i < error->error_headers_count; i++) {
            const char *errorHeader = error->error_headers[i];
            printf("Error Headers(%d):\n    %s\n", i, errorHeader == NULL ? "NULL Header" : errorHeader);
        }
    }
}
```
#### 相关链接
- 关于创建并行文件系统的API说明，请参见[创建并行文件系统](https://support.huaweicloud.com/api-obs/obs_04_0021.html)。
- 更多创建并行文件系统返回的错误码含义、问题原因及处理措施可参考[OBS错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html#section1)。
 
