ファイル入出力サンプル:エラーチェックあり

Last-modified: 2014-04-22 (火) 23:09:17
#include <stdio.h>
#include <string.h>
#define PASS_LEN_MAX 256
#define PASS_FILE	"pass.txt"
#define SUCCESS	1
#define NO_PASS_FILE	-1
#define READ_PASS_ERR	-2
void inputPass(char *pass);
void writePass(char *newPass);
int readPass(char *pass);
int main(void){
	char pass[PASS_LEN_MAX] = {0};
	inputPass( pass );
	puts( pass );
	writePass( pass );
	return 0;
}
void inputPass(char *pass){
	fputs("Input Password: ", stdout);
	fgets(pass, PASS_LEN_MAX, stdin);
}
void writePass(char *newPass){
	char oldPass[PASS_LEN_MAX] = {0};
	FILE *fp = NULL;
	if(SUCCESS == readPass( oldPass )){
		if( strcmp(oldPass, newPass) == 0 ){
			return;
		}
	}
	if( (fp = fopen(PASS_FILE, "w")) == NULL ){
		fprintf(stderr, "ERROR. Cannot open file(write):%s\n", PASS_FILE);
		return;
	}
	if(EOF == fputs( newPass, fp)){
		fprintf(stderr, "ERROR. Fail to fputs():%s\n", PASS_FILE);
	}
	fclose(fp);
}
int readPass(char *pPass){
	FILE *fp;
	if((fp = fopen(PASS_FILE, "r")) == NULL){
		fprintf(stdout, "Cannot open file(read):%s\n", PASS_FILE);
		return NO_PASS_FILE;
	}
	if(NULL == fgets( pPass, PASS_LEN_MAX, fp) ){
		fprintf(stdout, "Cannot read password.\n");
		fclose(fp);
		return READ_PASS_ERR;
	}
	fclose(fp);
	return SUCCESS;
}