C言語,ファイル読み込み,read

スポンサーリンク

鍛錬 13

C言語,ファイル読み込み,read

低水準入出力関数である read を用いて、ファイルの読み込みを行う関数についてです。

関連記事:C言語,ファイル書き込み,write

 
スポンサーリンク

プログラム

以下のプログラム file_read.c は、read を用いてファイルの読み込みを行います。

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

// preprocessor
#define FILENAME      "/var/tmp/sample.txt"
#define FILENAME_LEN  256
#define DATA_LEN      256

// prototype
int ReadXXXFile(char *filename, char *data);

// main
int main(void)
{
	char filename[FILENAME_LEN] = "";
	char data[DATA_LEN] = "";
	int ret;
	
	strncpy(filename, FILENAME, sizeof(filename) - 1);
	if ((ret = ReadXXXFile(filename, data)) == -1) {
		printf("ERROR,ReadXXXFile(),[%d]\n", ret);
		exit(EXIT_FAILURE);
	}
	
	printf("read data = %s\n", data);
	printf("read data len = %d\n", ret);
	
	return 0;
}

// =========================================
// @brief      ファイルからデータを読み込む
// @param[in]  filename  ファイル名
// @param[out] data      読込データ
// @return     len -> 読込データ長
// @return     -1  -> エラー
// @note       無し
// =========================================
int ReadXXXFile(char *filename, char *data)
{
	int len;
	int ret;
	int fd;
	
	if ((fd = open(filename, O_RDONLY)) == -1) {
		perror("open");
		return -1;
	}
	
	if ((len = read(fd, data, DATA_LEN - 1)) == -1) {
		perror("read");
		close(fd);
		return -1;
	}
	
	if ((ret = close(fd)) == -1) {
		perror("close");
		return -1;
	}
	
	return len;
}

サンプルファイル

以下は、読み込むサンプルファイル sample.txt です。

上記のプログラムを実行するとサンプルファイルが読み込まれ、文字列 abcdefg と文字列長の 7 が表示されます。

abcdefg

実行結果

以下は、プログラム file_read.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra file_read.c -o file_read
***@ubuntu:~/***/test/c$ ./file_read
read data = abcdefg
read data len = 7

 
上記に示した通り、ファイルからデータを読み込むことができました。

スポンサーリンク

シェアする

フォローする