<?xml version="1.0"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">


<refentry id="gfs-pio-open.3">

<refentryinfo><date>8 Aug 2020</date></refentryinfo>

<refmeta>
<refentrytitle>gfs_pio_open</refentrytitle>
<manvolnum>3</manvolnum>
<refmiscinfo>Gfarm</refmiscinfo>
</refmeta>

<refnamediv id="name">
<refname>gfs_pio_open</refname>
<refpurpose>Gfarmファイルシステムのファイルのオープン</refpurpose>
</refnamediv>
<refsynopsisdiv id="synopsis">
<funcsynopsis>
<funcsynopsisinfo format="linespecific">
#include &lt;gfarm/gfarm.h&gt;
</funcsynopsisinfo>

<funcprototype>
  <funcdef><function moreinfo="none"><returnvalue>gfarm_error_t</returnvalue> gfs_pio_open</function></funcdef>
    <paramdef>const char * <parameter moreinfo="none">gfarm_url</parameter></paramdef>
    <paramdef>int <parameter moreinfo="none">flags</parameter></paramdef>
    <paramdef>GFS_File * <parameter moreinfo="none">gfp</parameter></paramdef>
</funcprototype>

</funcsynopsis>
</refsynopsisdiv>

<!-- body begins here -->

<refsect1 id="description"><title>DESCRIPTION</title>
<para>
<parameter moreinfo="none">gfarm_url</parameter>
で指定したファイルをオープンし、GFS_File 構造体を
<parameter moreinfo="none">gfp</parameter>
の指す先に返します。
<parameter moreinfo="none">gfarm_url</parameter>
はGfarmファイルシステムのパス名、
あるいは
gfarm://metaserver:port/path/name
形式のGfarm URLです。
</para>

<para>
<parameter moreinfo="none">flags</parameter>
は、以下のフラグの bitwise-or で指定します。
はじめの三つのフラグはどれかが指定されている必要があります。
</para>
<variablelist>
<varlistentry>
<term><constant>GFARM_FILE_RDONLY</constant></term>
<listitem>
<para>読込みモードでファイルをオープンします。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_WRONLY</constant></term>
<listitem>
<para>書込みモードでファイルをオープンします。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_RDWR</constant></term>
<listitem>
<para>読み書きモードでファイルをオープンします。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_TRUNC</constant></term>
<listitem>
<para>ファイルが存在し、レギュラーファイルで書込みが許される場合、
ファイルサイズを0にします。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_APPEND</constant></term>
<listitem>
<para>ファイルをアペンドモードでオープンします。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_UNBUFFERED</constant></term>
<listitem>
<para>バッファを用いないで読み書きを行います。</para>
</listitem>
</varlistentry>
</variablelist>

<!--
<para>
以下のフラグは効率的な実行のためのヒントとして指定することができます。
</para>
<variablelist>
<varlistentry>
<term><constant>GFARM_FILE_SEQUENTIAL</constant></term>
<listitem>
<para>ファイルが連続的にアクセスされることを示します。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_REPLICATION</constant></term>
<listitem>
<para>ファイルの複製がローカル・ファイルシステムにない場合は、
ファイルアクセスに先立ち、
ローカル・ファイルシステムにファイルの複製を作成します。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_NOT_REPLICATION</constant></term>
<listitem>
<para>ファイルの複製がローカル・ファイルシステムにない場合でも、
ファイルの複製を作成せず、
遠隔のファイルシステムノードに格納されているファイルコピーを直接参照します。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_FILE_NOT_RETRY</constant></term>
<listitem>
<para>選択されたファイル複製が何らかの理由で存在しない、
あるいはアクセスできない場合でも、
自動的には別のファイル複製の参照を試みず、オープンに失敗します。</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<constant>GFARM_FILE_REPLICATION</constant>と
<constant>GFARM_FILE_NOT_REPLICATION</constant>は同時に指定することはできません。
</para>
 -->

</refsect1>

<refsect1 id="return-values"><title>RETURN VALUES</title>
<variablelist>
<varlistentry>
<term><constant>GFARM_ERR_NO_ERROR</constant></term>
<listitem>
<para>正常終了を示します。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_IS_A_DIRECTORY</constant></term>
<listitem>
<para>指定されたファイルはディレクトリです。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_IS_A_SYMBOLIC_LINK</constant></term>
<listitem>
<para>指定されたファイルはシンボリックリンクです。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_OPERATION_NOT_PERMITTED</constant></term>
<listitem>
<para>指定されたファイルはファイルではありません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_NO_SUCH_OBJECT</constant></term>
<listitem>
<para>指定されたファイルが存在しません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_NOT_A_DIRECTORY</constant></term>
<listitem>
<para>指定したパス名の親ディレクトリが、ディレクトリではありません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_PERMISSION_DENIED</constant></term>
<listitem>
<para>指定されたファイルに対し、
<parameter moreinfo="none">flags</parameter>
で指定されたモードでアクセスする権限がないか、
メタデータサーバへの認証に失敗しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_NO_MEMORY</constant></term>
<listitem>
<para>メモリ不足のため処理を中止しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_INVALID_ARGUMENT</constant></term>
<listitem>
<para><parameter moreinfo="none">flags</parameter>
の指定が不正です。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_GFARM_URL_HOST_IS_MISSING</constant></term>
<listitem>
<para><parameter moreinfo="none">gfarm_url</parameter>
で指定されたGfarm URLにおいて、
メタデータサーバが指定されていません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_GFARM_URL_PORT_IS_MISSING</constant></term>
<listitem>
<para><parameter moreinfo="none">gfarm_url</parameter>
で指定されたGfarm URLにおいて、
メタデータサーバのポート番号が指定されていません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_UNKNOWN_HOST</constant></term>
<listitem>
<para>指定されたメタデータサーバのアドレス解決ができません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_TOO_MANY_OPEN_FILES</constant></term>
<listitem>
<para>プロセスにおけるオープン可能なファイル数の限界に達しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_TOO_MANY_OPEN_FILES_IN_SYSTEM</constant></term>
<listitem>
<para>システムにおけるオープンできるファイル数の限界に達しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_NETWORK_IS_UNREACHABLE</constant></term>
<listitem>
<para>メタデータサーバに到達できません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_OPERATION_TIMED_OUT</constant></term>
<listitem>
<para>メタデータサーバへの接続がタイムアウトをおこしました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_PROTOCOL</constant></term>
<listitem>
<para>メタデータサーバとの通信にプロトコルエラーが発生しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_BROKEN_PIPE</constant></term>
<listitem>
<para>メタデータサーバとの通信が切断しました。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_PROTOCOL_NOT_SUPPORTED</constant></term>
<listitem>
<para>指定された認証プロトコルはサポートしていません。</para>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>GFARM_ERR_AUTHENTICATION</constant></term>
<listitem>
<para>メタデータサーバに対する認証に失敗しました。</para>
</listitem>
</varlistentry>
<!--
<varlistentry>
<term><constant>GFARM_ERR_READ_ONLY_FILE_SYSTEM</constant></term>
<listitem>
<para>指定したパス名は読み込み専用ファイルシステム上にあります。</para>
</listitem>
</varlistentry>
 -->
<varlistentry>
<term>その他</term>
<listitem>
<para>上記以外のエラーが生じたことを示します。
<citerefentry><refentrytitle>gfarm_error_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>
によりエラーの原因を文字列に変換することができます。
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

<refsect1 id="see-also"><title>SEE ALSO</title>
<para>
<citerefentry><refentrytitle>gfs_pio_close</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_create</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_eof</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_getc</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_getline</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_putc</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_putline</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_puts</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_read</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_seek</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_ungetc</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>gfs_pio_write</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
</refsect1>
</refentry>

