C言語関数:access





C言語のページでは、次の内容を解説しております。
C言語の入門講座  C言語の文法を中心に、基本的な関数などの解説をしています。
C言語ケーススタディ  C言語での実践的なプログラミングについて解説をしています。
C言語の関数リファレンス  C言語で用意されている関数を解説しています。
C言語で3次元動画プログラム  C言語で3次元タートルグラフィックを使用した3次元の動画プログラムの作成例です。
C言語の検定試験  C言語の文法に関する検定試験を実施することができます。
C言語でゲーム作成  C言語を使用したゲームの作り方を解説したページも用意しております。



2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を協力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。




■access
ファイルのアクセス権を調べる

【分類】
ファイル操作関数

【書式】
int access(const char *filename, int amode);

【パラメータの型と説明】

パラメータ説明
const char *filenameファイル名(パス名)
int amodeチェックするモード

【機能説明】
filenameで指定したファイルが存在、または書き込みが許可されているかを調べます。
amodeが0のときはファイルの存在を、2のときは書き込みが許可されているか調べます。
ファイルが存在している、または書き込みが許可されているとき0を返します。そうでないときは-1を返します。

Study Cを使用している場合は、下記のようにコマンドラインから実行(exprコマンドを使用)して動作を確認することができます。 まず、テストに使用するファイルを作成します。

C:\StudyC\MyProg>echo test file>test.txt

C:\StudyC\MyProg>type test.txt
test file

これで読み書き可能な(普通の状態)ファイル「test.txt」が作成されました。
※echoコマンドは画面に文字列を表示するものです。 他の多くのコマンドでも同じですが、最後に「>ファイル名」を指定すると画面に表示される内容がファイルに書き込まれます。

C:\StudyC\MyProg>expr access("test.txt", 0)
<int>0 0x0

C:\StudyC\MyProg>expr chmod("test.txt", 0x0100)
<int>0 0x0

C:\StudyC\MyProg>expr access("test.txt", 2)
<int>-1 0xffffffff

C:\StudyC\MyProg>expr chmod("test.txt", 0x0080)
<int>0 0x0

C:\StudyC\MyProg>expr access("test.txt", 2)
<int>0 0x0

C:\StudyC\MyProg>expr access("testx.txt", 0)
<int>-1 0xffffffff

※↑カーソルキーを押すと入力したコマンドが呼び出されるので色々と変更して試してみてください。

1.access()関数を使用してファイル「test.txt」が存在しているか確認しています。存在するので0が返されます。
2.chmod()関数を使用してファイル「test.txt」を読み込み専用に変更しています。
3.access()関数を使用してファイル「test.txt」書き込み可能か確認しています。読み込み専用なので-1が返されます。
4.chmod()関数を使用してファイル「test.txt」を読み書き可能な状態(普通の状態)に戻しています。
5.再度access()関数を使用してファイル「test.txt」書き込み可能か確認しています。書き込み可能なので0が返されます。
6.access()関数を使用してファイル「testx.txt」が存在しているか確認しています。存在しないので-1が返されます。

通常のコンパイラを使用する場合の使用例は下記になります(もちろんStudy CでもOKです)。

#include <stdio.h>
#include <fcntl.h>

main()
{
        int rc;
        rc = access("test.txt", 0);
        if (rc == 0)
        {
                printf("ファイル「test.txt」は存在します。%d\n", rc);
        }
        else
        {
                printf("ファイル「test.txt」は存在しません。%d\n", rc);
        }

        printf("読み込み専用に変更:%d\n", chmod("test.txt", S_IREAD));
        rc = access("test.txt", 2);
        if (rc == 0)
        {
                printf("ファイル「test.txt」は書き込み可能です。%d\n", rc);
        }
        else
        {
                printf("ファイル「test.txt」は読み込み専用です。%d\n", rc);
        }

        printf("読み書き可に変更:%d\n", chmod("test.txt", S_IWRITE));
        rc = access("test.txt", 2);
        if (rc == 0)
        {
                printf("ファイル「test.txt」は書き込み可能です。%d\n", rc);
        }
        else
        {
                printf("ファイル「test.txt」は読み込み専用です。%d\n", rc);
        }

        rc = access("testx.txt", 0);
        if (rc == 0)
        {
                printf("ファイル「testx.txt」は存在します。%d\n", rc);
        }
        else
        {
                printf("ファイル「testx.txt」は存在しません。%d\n", rc);
        }
}

実行結果は以下になります。

※実行時にファイル「test.txt」が書き込み可能状態で存在している場合です。 また、ファイル「testx.txt」は存在しない場合です。

ファイル「test.txt」は存在します。0
読み込み専用に変更:0
ファイル「test.txt」は読み込み専用です。-1
読み書き可に変更:0
ファイル「test.txt」は書き込み可能です。0
ファイル「testx.txt」は存在しません。-1

1.最初のaccess()関数でファイル「test.txt」が存在しているか確認しています。 存在しているので0が返されます。
2.chmod()関数でファイル「test.txt」を読み込み専用に変更しています。
3.access()関数でファイル「test.txt」が書き込み可能か確認しています。 読み込み専用なので-1が返されます。
4.chmod()関数でファイル「test.txt」を読み書き可(普通の状態)に変更しています。
5.access()関数でファイル「test.txt」が書き込み可能か確認しています。 書き込み可能なので0が返されます。
6.最初のaccess()関数でファイル「testx.txt」が存在しているか確認しています。 存在していないので-1が返されます。

【参照関数】
chmod