C言語例文集


 open()    ファイルをオープンする

ヘッダ fcntl.h、sys/types.h、sys/stat.h
書式 int open(const char *path, int mode, [mode_t creat_mode])
引数 path … ファイル名
mode … オープンするファイルに許可を与えるモード
creat_mode … modeにO_CREATを指定した場合に設定できるオープンするファイルのモード(省略可能)


modeで設定できる値は、下記「※1」の3つのいずれか1つと、「※2」の任意の値を「|(論理和)」で結んだものとなる。

※1
O_RDONLY 読み込み可
O_WRONLY 書き込み可
O_RDWR 読み書き可

※2
O_APPEND ファイルポインタをファイルの最後に移動する
O_CREAT ファイルを生成する
O_TRUNC ファイルが存在する場合、サイズを0にする
O_BINARY バイナリモード
O_TEXT テキストモード


modeにO_CREATを指定した場合、3番目の引数で「※3」のcreat_modeを指定できる。

※3
S_IWRITE 読み書き可
S_IREAD 読み込み可
S_IREAD | S_IWRITE 読み書き可

戻り値 成功:ファイルデスクリプタ(そのファイルを一意に識別できる数値)
失敗:-1
解説 ファイルをオープンし、ファイルデスクリプタを返却する低水準入出力関数。


<サンプルプログラム>

/****************************************************************************/
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

#define BUF_SIZE 512

int main(void)
{
    // 変数定義
    int fd1, fd2;
    int byte_num;
    char buf[BUF_SIZE];

    // 変数初期化
    fd1 = 0;
    fd2 = 0;
    byte_num = 0;
    memset(buf, '\0', BUF_SIZE); 

    // ファイルのオープン
    fd1 = open("./file1", O_RDONLY);  // 読み込み専用でファイルを開く
    fd2 = open("./file2", O_WRONLY);  // 書き込み専用でファイルを開く

    if(fd1 == -1 || fd2 == -1)  // ファイルオープン失敗
    {
        fprintf(stdout, "ファイルオープンエラー\n");
        return 1;
    }

    // ファイルから5バイト読み込み
    byte_num = read(fd1, &buf[0], 5);  // ファイルから5バイト読み込み

    if(byte_num == -1)  // ファイル読み込み失敗
    {
        fprintf(stdout, "ファイル読み込みエラー\n");
        return 1;
    }

    fprintf(stdout, "file1から%dバイト読み込みました。\n", byte_num);
    fprintf(stdout, "読み込んだ文字列:%s\n", buf);

    // ファイルへ3バイト書き込み
    byte_num = write(fd2, &buf[0], 3);

    if(byte_num == -1)  // ファイル書き込み失敗
    {
        fprintf(stdout, "ファイル書き込みエラー\n");
        return 1;
    }

    fprintf(stdout, "file2から%dバイト書き込みました。\n", byte_num);
    buf[byte_num] = '\0';
    fprintf(stdout, "書き込んだ文字列:%s\n", buf);

    // ファイルを閉じる
    close(fd1);
    close(fd2);

    return 0;
}
/****************************************************************************/


<使用ファイル>

プログラムで使用するfile1.txtの内容(10バイト)
--------------------------
abcdefghij
--------------------------


<実行結果>



<Topページ>

Copyright(c) 2010 , cgengor
このWebページの内容を無断で複製または転載することを禁じます。
このWebページの情報を利用することにより発生したいかなる損害について著作権保有者はいっさいの責任を負いません。