fwrite

ファイルへ size バイトのデータを n 個書き込み

【書式】
#include <stdio.h>
size_t fwrite(const void *buf, size_t size, size_t n, FILE *fp);

【説明】
bufからファイルfpへsizeバイトのデータをn個書き込みます。ファイル位置指示子を書き込んだデータバイト分進めます。エラーが発生した場合にはファイル位置指示子の値は不定です。

【引数】
const void *buf : 書き込みデータのポインタ
size_t size : 書き込みデータのバイト長さ
size_t n : 書き込みデータの数
FILE *fp : FILEポインタ

【戻り値】
正常時 : 書き込んだデータ個数(バイトではありません)
エラー時 : nより小さな値

【使用例】
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
	FILE *fp;
	int outbf[10] = {1,2,3,4,5,6,7,8,9,10};
	int inbuf[10];
	int i;

	if (argc != 2) {
		printf("オープンファイル名を指定してください\n");
		exit(EXIT_FAILURE);
	}

	/* バイナリ書き込み読み込みモードでファイルをオープン */
	if((fp = fopen(argv[1], "wb+")) == NULL ) {
		printf("ファイルオープンエラー\n");
		exit(EXIT_FAILURE);
	}

	/* ファイルにデータを書き込み */
	fwrite(outbf, sizeof(int), 10, fp);

	/* ファイルの先頭に移動 */
	fseek(fp, 0L, SEEK_SET);

	/* 書き込んだデータを読み込んでみる */
	fread(inbuf, sizeof(int), 10, fp);

	/* ファイルクローズ */
	fclose(fp);

	/* 読み込みデータの確認 */
	for (i=0; i<10; i++)
		printf("%3d",inbuf[i]);
	printf("\n");

	return 0;
}
【実行結果】
  1  2  3  4  5  6  7  8  9 10
【注意】

MS-DOSやWindowsの環境でバイナリのファイルをモードに"b"の指定をせずにテキストモードオープンしてfwriteすると、'\n'である0x0aのデータに'\r'である0x0dを付加するので注意が必要です。モードについては、fopenのモードを参照してください。

(例)
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
        FILE *fp;
        int outbf[10] = {8,9,10,11,12,13,14,15,16,17};
        int inbuf[10];
        int i;
        
        if (argc != 2) {
                printf("オープンファイル名を指定してください\n");
                exit(EXIT_FAILURE);
        }
        
        /* ファイルをテキスト書き込みモードでオープン */                
        if((fp = fopen(argv[1], "w")) == NULL ) {
                printf("ファイルオープンエラー\n");
                exit(EXIT_FAILURE);
        }

        /* ファイルにデータを書き込み */
        printf("fwrite :%d個データを書き込み\n", fwrite(outbf, sizeof(int), 10, fp) );
        
        fclose(fp);
        
        for (i=0; i<10; i++)
                printf("%#x ",outbf[i]);
        printf("\n");
        
        /* ファイルをバイナリ読み込みモードでオープン */                
        if((fp = fopen(argv[1], "rb")) == NULL ) {
                printf("ファイルオープンエラー\n");
                exit(EXIT_FAILURE);
        }       
        /* 書き込んだデータを読み込んでみる */
        printf("バイナリモードfread :%d個データを読み込み\n", fread(inbuf, sizeof(int), 10, fp));
        
        fclose(fp);
        
        for (i=0; i<10; i++)
                printf("%#x ",inbuf[i]);
        printf("\n");

        return 0;
}
(実行結果)LSIC試食版で確認
fwrite :10個データを書き込み
0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 
バイナリモードfread :10個データを読み込み
0x8 0x9 0xa0d 0xb00 0xc00 0xd00 0xe00 0xf00 0x1000 0x1100 

※緑字のように0x0dが挿入されていることが確認できます。

戻る


banner
初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved