## Name

gfs_pio_create — create a file in the Gfarm file system

## 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

`gfs_pio_create()` creates a new file in the Gfarm file system whose name is the string pointed to by `gfarm_url` with the access mode `mode`, and returns a `GFS_File` structure to the address pointed to by `gfp`. `Mode` specifies the file permissions to be created, and is modified by the process's `umask`.

The `flags` argument has the same meaning as the second argument of `gfs_pio_open()`, including the point such that exactly one of `GFARM_FILE_RDONLY`, `GFARM_FILE_WRONLY`, and `GFARM_FILE_RDWR` should be specified. In addition, it is possible to specify `GFARM_FILE_EXCLUSIVE`. With this flag, `gfs_pio_create()` will fail when the file already exists.

Note that `GFARM_FILE_TRUNC` must be explicitly specified by the `flags` argument if needed.

## RETURN VALUES

`GFARM_ERR_NO_ERROR`

  The function terminated successfully.

`GFARM_ERR_IS_A_DIRECTORY`

  `gfarm_url` refers to a directory.

`GFARM_ERR_IS_A_SYMBOLIC_LINK`

  `gfarm_url` refers to a symbolic link.

`GFARM_ERR_OPERATION_NOT_PERMITTED`

  `gfarm_url` refers to not a regular file.

`GFARM_ERR_NOT_A_DIRECTORY`

  A component used as a directory in `gfarm_url` is not, in fact, a directory.

`GFARM_ERR_PERMISSION_DENIED`

  The requested access to the file is not allowed, or one of the directories in `gfarm_url` did not allow search (execute) permission, or the file did not exist yet and write access to the parent directory is not allowed. Or, the authentication to the metadata server fails.

`GFARM_ERR_NO_MEMORY`

  Insufficient memory was available.

`GFARM_ERR_INVALID_ARGUMENT`

  `flags` is not valid.

`GFARM_ERR_GFARM_URL_HOST_IS_MISSING`

  `gfarm_url` does not include a metadata server.

`GFARM_ERR_GFARM_URL_PORT_IS_MISSING`

  `gfarm_url` does not include a port number of the metadata server.

`GFARM_ERR_UNKNOWN_HOST`

  The metadata server cannot be resolved.

`GFARM_ERR_TOO_MANY_OPEN_FILES`

  The process opens too many files.

`GFARM_ERR_TOO_MANY_OPEN_FILES_IN_SYSTEM`

  The system limit on the total number of open files has been reached.

`GFARM_ERR_NETWORK_IS_UNREACHABLE`

  Network is unrechable.

`GFARM_ERR_OPERATION_TIMED_OUT`

  Connetion timeout occurs.

`GFARM_ERR_PROTOCOL`

  Protocol error occurs.

`GFARM_ERR_BROKEN_PIPE`

  Connection to the metadata server is broken.

`GFARM_ERR_PROTOCOL_NOT_SUPPORTED`

  Specified authentication protocol is not supported.

`GFARM_ERR_AUTHENTICATION`

  User authentication failed when connecting to the metadata server.

`GFARM_ERR_ALREADY_EXISTS`

  `gfarm_url` already exists and GFARM_FILE_EXCLUSIVE was used.

Others

  An error except the above occurred. The reason is shown by 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)