ファイル処理の手順は、ファールオープン->ファイルの読み書き->ファイルクローズとなる。
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;
}