Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 入出力ライブラリ」です。
fgetc関数とgetc関数は関数名が異なるだけで機能および、形式は同じです。ただし、C言語の処理系により異なりますが、getc関数は関数ではなくマクロで実装されている可能性が有ります。
これらの関数はファイルポインタに対応したファイルから1文字を入力して返り値として返します。返り値の型名はchar型ではなくint型ですので注意してください。(char型は整数型(short型やint型、等)の一種ですので、char型からint型への変換は可能です。従って、文字をint型として取り扱っても問題有りません)
形式 | #include <stdio.h> int fgetc(FILE *fp); int getc(FILE *fp); |
---|---|
返り値 | 入力できた場合は入力した1文字を返します。ファイルの終端やエラーを検出した場合はEOFを返します。 |
引数 |
|
使用法、 他 |
返り値がEOFの場合は厳密にはファイルの終端かエラーか分かりませんので、必要に応じて、feof関数やferror関数でチェックを行います。 |
getchar関数は標準入力から1文字を入力します。従って、int fgetc(stdin);
やint getc(stdin);
と同じです。
形式 | #include <stdio.h> int getchar(void); |
---|---|
返り値 | fgetc関数、getc関数と同じです。 |
引数 | なし。 |
ungetc関数は文字を再度入力できるように入力ストリームに戻します。戻せる文字は1文字のみです。
形式 | #include <stdio.h> int ungetc(int c, FILE *fp); |
---|---|
返り値 | 正常に戻せた場合は第1引数の値を返し、出来なかった場合はEOFを返します。 |
引数 |
|
実行時引数で指定したファイルの内容を標準出力に出力します。(catコマンドと同じような機能です)
$ cat /etc/issue ← catコマンドで/etc/issueファイルの内容を確認します Fedora release 8 (Werewolf) Kernel \r on an \m $ ./ex14_1_2.prg /etc/issue ← 実行時引数に/etc/issueを指定して実行します Fedora release 8 (Werewolf) Kernel \r on an \m $
fputc関数とputc関数は関数名が異なるだけで機能及び、形式は同じです。ただし、C言語の処理系により異なりますが、putc関数は関数ではなくマクロで実装されている可能性が有ります。
これらの関数はファイルポインタに対応したファイルに1文字出力します。
形式 | #include <stdio.h> int fputc(int c, FILE *fp); int putc(int c, FILE *fp); |
---|---|
返り値 | 出力できた場合は出力した1文字を返します。エラーを検出した場合はEOFを返します。 |
引数 |
|
putchar関数は標準出力に1文字出力します。従って、int fputc(c, stdout);
やint putc(c, stdout);
と同じです。
形式 | #include <stdio.h> int putchar(int c); |
---|---|
返り値 | fputc関数、putc関数と同じです。 |
引数 | 出力する1文字を指定します。 |
実行時引数として2つのファイルパス名を指定してファイルのコピーを行います。(cpコマンドと同じような機能です)なお、ソースファイルの行数を少なくしてプログラムのポイントを明確にするため、エラー処理は省略しています。
$ ls ./temp.txt ← ./temp.txtファイルの有無を確認します ls: cannot access ./temp.txt: そのようなファイルやディレクトリはありません $ $ ./ex14_1_3.prg /etc/issue ./temp.txt ← 実行時引数に/etc/issueと./temp.txtを指定して実行します $ $ cat ./temp.txt ← ./temp.txtファイルの内容を確認します Fedora release 8 (Werewolf) Kernel \r on an \m $
fgets関数はファイルポインタに対応したファイルから指定した長さの文字列または、1行分の文字列を入力します。
形式 | #include <stdio.h> char *fgets(char *buff, int size, FILE *fp); |
---|---|
返り値 | 入力できた場合は第1引数のbuffの値(buffの先頭アドレス)を返します。エラーを検出した場合または、何も入力しないでファイルの終端を検出した場合はNULLを返します。 |
引数 |
|
使用法、 他 |
返り値がNULLの場合は厳密にはファイルの終端かエラーか分かりませんので、必要に応じて、feof関数やferror関数でチェックを行います。 |
gets関数は標準入力から1行分の文字列を入力します。この関数は第1引数に指定したバッファに入りきらない容量の文字列も入力してしまいます。従って、セキュリティ上、大変危険ですので、なるべく使わない方がよいでしょう。
形式 | #include <stdio.h> char *gets(char *buff); |
---|---|
返り値 | fgets関数と同じです。 |
引数 |
|
実行時引数で指定したファイルの内容を標準出力に出力します。(catコマンドと同じような機能です)なお、ソースファイルの行数を少なくしてプログラムのポイントを明確にするため、エラー処理は省略しています。
$ ./ex14_1_4.prg /etc/issue ← 実行時引数に/etc/issueを指定して実行します Fedora release 8 (Werewolf) Kernel \r on an \m $
fputs関数はファイルポインタに対応したファイルに文字列を出力します。
形式 | #include <stdio.h> int fputs(const char *buff, FILE *fp); |
---|---|
返り値 | 正常に出力できた場合はEOF以外(0以上の値)を返します。エラーを検出した場合はEOFを返します。 |
引数 |
|
puts関数は標準出力に1行分の文字列を出力します。なお、文字列の最後のヌル文字を改行文字に置き換えて出力しますので注意してください。
形式 | #include <stdio.h> int puts(const char *buff); |
---|---|
返り値 | fputs関数と同じです。 |
引数 |
|
fgetc関数とfputc関数の例題と同じく、実行時引数として2つのファイルパス名を指定して、ファイルのコピーを行います。なお、ソースファイルの行数を少なくしてプログラムのポイントを明確にするため、エラー処理は省略しています。
$ ls ./temp.txt ls: cannot access ./temp.txt: そのようなファイルやディレクトリはありません $ $ ./ex14_1_5.prg /etc/issue ./temp.txt $ cat ./temp.txt Fedora release 8 (Werewolf) Kernel \r on an \m $