fopen(3)とfputc(3)でファイルに文字(バイト)を書き込む - C言語
ふつうのLinuxプログラミング でfopen(3)とfputc(3)が出てきたので、遊んでみた
fopen(3)の定義を見てみる
#include <stdio.h> FILE * fopen(const char * restrict path, const char * restrict mode);
ファイルパスpath
からストリームを作り、そのFILEポインタを返す。mode
でどのようにファイルを開くかを指定できる
"w"モード
modeに"w"
を指定することで、存在しないファイルを指定した場合に、ファイルを作成することができる。
// file_open_close.c #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ FILE *f; f = fopen(argv[1], "w"); fclose(f); // stdlib.hをインクルードしないといけない exit(0); }
$ ./file_open_close.c a.txt
上のように実行すると、a.txtがなければ、作成される!今は、何も書き込んでいないため、空のファイルになる。
a.txtに何か書き込んで、再度、./file_open_close.c a.txt
を実行すると、a.txtに書き込んだ内容がなくなる。これは、modeが"w"
の時には、ファイルが存在している場合、内容を全削除し、書き込みを開始するため。
fputc(3)の定義をみてみる
#include <stdio.h> int fputc(int c, FILE *stream);
ストリームstream
に対して、文字c
を書き込む。書き込みに成功したら、書き込んだ文字を返す。エラーが起きた場合にはEOF(-1)を返す。
文字(バイト)を書き込んでみる
fputc(3)
を使えばできるのかと思って、以下のようにやってみたけど、できなかった。
できなかったのは、よくわからない文字コード(CRって文字?の文字コード)を渡していたため
f = fopen(argv[1], "w"); fputc(13, f); fclose(f);
13
がだめなのかな?
→intだから、数字じゃなきゃだめなのかと思ってたけど、そういうわけではないらしい...文字(char)であればいけるっぽい!!
f = fopen(argv[1], "w"); // 13 から 't' にしてみた fputc('t', f); fclose(f);
おぉ!!書き込まれた!!
もう少し、C言語について理解しないとだめですね...(int ってなってても、文字が行けるのはなぜだ...)
引数のint c
について
intというのは、文字コードなのかも!!97
を渡したら、a
が書き込まれたから、文字コード!!!
文字コードについてはC言語入門 第9回 文字・文字列の使い方を見て、少しだけわかったようなきがする。
参考文献
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/09/22
- メディア: Kindle版
- この商品を含むブログを見る