## Name

gfs_pio_create — Gfarmファイルシステムのファイルの作成

## Synopsis

    #include <gfarm/gfarm.h>

`gfarm_error_t gfs_pio_create(` | gfarm_url, |
| flags, |
| mode, |
| gfp`)`; |

`const char * gfarm_url`;
`int flags`;
`gfarm_mode_t mode`;
`GFS_File * gfp`;

## DESCRIPTION

指定した `gfarm_url` に、モード `mode` でファイルを新規作成し、 `GFS_File` 構造体を `gfp` の指す先に返します。

引数 `flags` は、 `gfs_pio_open()` の第二引数と同じ意味を持ちます。 `GFARM_FILE_RDONLY`、 `GFARM_FILE_WRONLY`、 `GFARM_FILE_RDWR` のいずれか一つのフラグを必ず指定しなければならない点も同じです。 ただし、 `gfs_pio_create()` に特有のフラグとして、 `GFARM_FILE_EXCLUSIVE` を指定することができます。この指定を行なった場合、 ファイルが既に存在する場合は、ファイルのオープンに失敗します。

引数 `flags` の値として `GFARM_FILE_TRUNC` が必要な場合は、 明示的に指定する必要がありますので、ご注意ください。

## RETURN VALUES

`GFARM_ERR_NO_ERROR`

  正常終了を示します。

`GFARM_ERR_IS_A_DIRECTORY`

  指定されたファイルはディレクトリです。

`GFARM_ERR_IS_A_SYMBOLIC_LINK`

  指定されたファイルはシンボリックリンクです。

`GFARM_ERR_OPERATION_NOT_PERMITTED`

  指定されたファイルはファイルではありません。

`GFARM_ERR_NOT_A_DIRECTORY`

  指定したパス名の親ディレクトリが、ディレクトリではありません。

`GFARM_ERR_PERMISSION_DENIED`

  指定されたファイルに対し、 `flags` で指定されたモードでアクセスする権限がないか、その親ディレクトリへの 書き込み権限がありません。 あるいは、メタデータサーバへの認証に失敗しました。

`GFARM_ERR_NO_MEMORY`

  メモリ不足のため処理を中止しました。

`GFARM_ERR_INVALID_ARGUMENT`

  `flags` の指定が不正です。

`GFARM_ERR_GFARM_URL_HOST_IS_MISSING`

  `gfarm_url` で指定されたGfarm URLにおいて、 メタデータサーバが指定されていません。

`GFARM_ERR_GFARM_URL_PORT_IS_MISSING`

  `gfarm_url` で指定されたGfarm URLにおいて、 メタデータサーバのポート番号が指定されていません。

`GFARM_ERR_UNKNOWN_HOST`

  指定されたメタデータサーバのアドレス解決ができません。

`GFARM_ERR_TOO_MANY_OPEN_FILES`

  プロセスにおけるオープン可能なファイル数の限界に達しました。

`GFARM_ERR_TOO_MANY_OPEN_FILES_IN_SYSTEM`

  システムにおけるオープンできるファイル数の限界に達しました。

`GFARM_ERR_NETWORK_IS_UNREACHABLE`

  メタデータサーバに到達できません。

`GFARM_ERR_OPERATION_TIMED_OUT`

  メタデータサーバへの接続がタイムアウトをおこしました。

`GFARM_ERR_PROTOCOL`

  メタデータサーバとの通信にプロトコルエラーが発生しました。

`GFARM_ERR_BROKEN_PIPE`

  メタデータサーバとの通信が切断しました。

`GFARM_ERR_PROTOCOL_NOT_SUPPORTED`

  指定された認証プロトコルはサポートしていません。

`GFARM_ERR_AUTHENTICATION`

  メタデータサーバに対する認証に失敗しました。

`GFARM_ERR_ALREADY_EXISTS`

  `flags`引数に `GFARM_FILE_EXCLUSIVE`フラグが指定されたが、 ファイルが既に存在しました。

その他

  上記以外のエラーが生じたことを示します。 gfarm_error_string(3) によりエラーの原因を文字列に変換することができます。

## SEE ALSO

gfs_pio_close(3), gfs_pio_create(3), gfs_pio_eof(3), gfs_pio_error(3), gfs_pio_flush(3), gfs_pio_getc(3), gfs_pio_getline(3), gfs_pio_open(3), gfs_pio_putc(3), gfs_pio_putline(3), gfs_pio_puts(3), gfs_pio_read(3), gfs_pio_seek(3), gfs_pio_ungetc(3), gfs_pio_write(3)