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