C言語のファイル入出力

ファイル処理の手順は、ファールオープン->ファイルの読み書き->ファイルクローズとなる。

int main(void){

	FILE *fp;
	int ch;

	fp = fopen("myfile1.txt", "r");
	if (fp == NULL) return 1;

	ch = fgetc(fp);
	printf("ch=%c\n", ch);

	fclose(fp);

	return 0;
}

$ touch myfile1.txt
$ sudo vi myfile1.txt
$ ./dev
ch=a

ファイルが正常にオープンされると、ポインタを返す
FILE *fi, *foが良く使われる
入出力データの処理を効率的に行う為、ストリームという概念を使用する(stdin, stdout, stderr)
fp = fopen(“myfile1.txt”, “r”); と記述する

### fopen関数のオープンモード
r: read
w: write
a: apend
rb: binary fileのread
wb: binary fileのwrite
ab: binary fileのappend
※バイナリファイルとは自動変換を行わないこと

### ファイル入出力関数
fputs(), fgetc(), fputs(), fgets(), fprintf(), fscanf()

int main(void){

	FILE *fp;
	char ss[256];

	if((fp=fopen("myfile1.txt", "r")) == NULL){
		printf("file cannot open.\n");
		return 1;
	}

	while (fgets(ss, 256, fp) != NULL){
		printf("%s", ss);
	}

	fclose(fp);

	return 0;
}

### ファイル出力

int main(void){

	FILE *fp;
	int dt = 1234;

	if((fp=fopen("myfile1.txt", "w")) == NULL){
		printf("file cannot open.\n");
		return 1;
	}

	fputs("char output\n", fp);
	fputc('A', fp);
	fputc('\n', fp);
	fprintf(fp, "dt=%d\n", dt);

	fclose(fp);

	return 0;
}

ファイルコピー

int main(void){

	FILE *fin, *fout;
	char infile[80], outfile[80], ss[256];

	printf("inputfile="); gets(infile);
	printf("outputfile="); gets(outfile);

	if((fin=fopen(infile, "r")) == NULL){
		printf("cannot open input file.\n");
		return 1;
	}
	if((fin=fopen(outfile, "w")) == NULL){
		printf("cannot open output file.\n");
		return 1;
	}

	while(fgets(ss, 256, fin) != NULL){
		fputs(ss, fout);
	}

	fclose(fin);
	fclose(fout);

	return 0;
}

### コマンドラインから引数を渡す

int main(int argc, char *argv[]){

	FILE *fin, *fout;
	char ss[256];

	if(argc != 3){
		printf("引数の数が異なります\n");
		return 1;
	}

	if((fin=fopen(argv[1], "r")) == NULL){
		printf("cannot open inputfile\n");
		return 1;
	}
	if((fin=fopen(argv[2], "w")) == NULL){
		printf("cannot open outputfile\n");
		return 1;
	}

	while (fgets(ss, 256, fin) != NULL){
		fputs(ss, fout);
	}

	fclose(fin);
	fclose(fout);

	return 0;
}

argv[0]はコマンド名そのもの。
argcは全ての引数、argv[]は対応する引数

int main(int argc, char *argv[]){

	if(argc != 3) return 1;
	printf("argc =%d\n", argc);
	printf("argv[0] =%s\n", argv[0]);
	printf("argv[1] =%s\n", argv[1]);
	printf("argv[2] =%s\n", argv[2]);

	return 0;
}