fgetpos.txt
Hello C World
Test C
fgetpos.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | /*
stdio.h [fgetpos]
書式: int fgetpos(FILE *fp, fpos_t *pos)
機能: ファイル位置の取得
引数: FILE *fp: ファイル (ストリーム) ポインタ
fpos_t *pos: ファイル位置格納
戻り値: 成功すると, 0 を返し,
失敗すると, 0 以外を返す.
*/
/*
fpos_t 型とは, ファイル位置を格納するための型だが,
typedef long fpos_t というように, 実際に long 型
*/
/*
fopen() を使用してファイルを読み取りモード "r" で開いた直後では,
ファイル位置は先頭の 0 である.
そこから, fgetc() で 5 文字読み取った後では, ファイル位置は 5 となる.
*/
#include <stdio.h>
int main(void){
FILE *fp;
char *fname = "fgetpos.txt";
int i, c;
fpos_t pos;
fp = fopen(fname, "r");
if(fp == NULL){
printf("%s ファイルが開けない\n", fname);
return -1;
}
fgetpos(fp, &pos);
printf("ファイル位置 %d\n", (int)pos);
for(i = 0; i < 5; i++){
c = fgetc(fp);
printf("%c\n", c);
}
fgetpos(fp, &pos);
printf("ファイル位置 %d\n", (int)pos);
fclose(fp);
return 0;
}
|
fgetpos.c の実行結果は:
[cactus:~/code_c/refer]% ./fgetpos
ファイル位置 0
H
e
l
l
o
ファイル位置 5
fsetpos.txt
Hello C World
Test C
fsetpos.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /*
stdio.h [fsetpos]
書式: int fsetpos(FILE *fp, const fpos_t *pos)
機能: ファイル位置の取得
引数: FILE *fp: ファイル (ストリーム) ポインタ
const fpos_t *pos: ファイル位置格納
戻り値: 成功すると, 0 を返し,
失敗すると, 0 以外を返す.
*/
#include <stdio.h>
int main(void){
FILE *fp;
char *fname = "fsetpos.txt";
int i, c;
fpos_t pos;
fp = fopen(fname, "r");
if(fp == NULL){
printf("%s ファイルが開けない\n", fname);
return -1;
}
pos = 6;
fsetpos(fp, &pos);
for(i = 0; i < 7; i++){
c = fgetc(fp);
printf("%c\n", c);
}
fgetpos(fp, &pos);
printf("ファイル位置 %d\n", (int)pos);
fclose(fp);
return 0;
}
|
fsetpos.c の実行結果は:
[cactus:~/code_c/refer]% ./fsetpos
C
W
o
r
l
d
ファイル位置 13
ftell.txt
Hello C World
Test C
ftell.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /*
stdio.h [ftell]
書式: long ftell(FILE *fp)
機能: 現在のファイル位置の取得
引数: FILE *fp: ファイル (ストリーム) ポインタ
戻り値: 成功すると, 現在のファイル位置を返し,
失敗すると, -1 を返す.
*/
#include <stdio.h>
int main(void){
FILE *fp;
char *fname = "ftell.txt";
long sz;
fp = fopen(fname, "rb");
if(fp == NULL){
printf("%s ファイルが開けない\n", fname);
return -1;
}
fseek(fp, 0, SEEK_END);
sz = ftell(fp);
printf("%s ファイルのサイズ: %d バイト\n", fname, (int)sz);
fclose(fp);
return 0;
}
|
ftell.c の実行結果は:
[cactus:~/code_c/refer]% ./ftell
ftell.txt ファイルのサイズ: 21 バイト
fseek.txt
Hello C World
Test C
fseek.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /*
stdio.h [fseek]
書式: int fseek(FILE *fp, long offset, int origin)
機能: ファイル位置を原点位置から移動させ設定する
引数: FILE *fp: ファイル (ストリーム) ポインタ
long offset: 指定位置からのズレ量
int origin: 原点位置の種類
戻り値: 成功すると, 0 を返し,
失敗すると, 0 以外を返す.
*/
/*
第 3 引数 origin の種類:
SEEK_SET: ファイルの先頭位置を指定
SEEK_CUR: ファイルの現在位置を指定
SEEK_END: ファイルの終端位置を指定
*/
#include <stdio.h>
int main(void){
FILE *fp;
char *fname = "fseek.txt";
fpos_t sz;
fp = fopen(fname, "rb");
if(fp == NULL){
printf("%s ファイルが開けない\n", fname);
return -1;
}
fseek(fp, 0, SEEK_END);
fgetpos(fp, &sz);
printf("%s ファイルのサイズ: %d バイト\n", fname, (int)sz);
fclose(fp);
return 0;
}
|
fseek.c の実行結果は:
[cactus:~/code_c/refer]% ./fseek
fseek.txt ファイルのサイズ: 21 バイト
rewind.txt
Hello C World
Test C
rewind.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /*
stdio.h [rewind]
書式: void rewind(FILE *fp)
機能: ファイル位置を先頭に戻す
引数: FILE *fp: ファイル (ストリーム) ポインタ
戻り値: なし
*/
#include <stdio.h>
int main(void){
FILE *fp;
char *fname = "rewind.txt";
fpos_t pos;
fp = fopen(fname, "rb");
if(fp == NULL){
printf("%s ファイルが開けない\n", fname);
return -1;
}
fseek(fp, 0, SEEK_END);
fgetpos(fp, &pos);
printf("%s ファイル位置は: %d です\n", fname, (int)pos);
rewind(fp);
fgetpos(fp, &pos);
printf("ファイル位置は %d です\n", (int)pos);
fclose(fp);
return 0;
}
|
rewind.c の実行結果は:
[cactus:~/code_c/refer]% ./rewind
rewind.txt ファイル位置は: 21 です
ファイル位置は 0 です
remove.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /*
stdio.h [remove]
書式: int remove(const char *filename)
機能: ファイルの削除
引数: const char *filename: 削除するファイル名
戻り値: 成功すると, 0 を返し,
失敗すると, 0 以外を返す.
*/
#include <stdio.h>
int main(void){
char *fname = "remove.txt";
if(remove(fname) == 0){
printf("%s ファイルを削除した\n", fname);
}else{
printf("ファイル削除に失敗した\n");
}
return 0;
}
|
remove.c の実行結果は:
[cactus:~/code_c/refer]% ./remove
remove.txt ファイルを削除した
[cactus:~/code_c/refer]% ./remove
ファイル削除に失敗した
rename.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /*
stdio.h [rename]
書式: int rename(const char *oldname, const char *newname)
機能: ファイル名, フォルダ名の変更と移動
引数: const char *oldname: 元のファイル名 (or フォルダ名)
const char *newname: 新しいファイル名 (or フォルダ名)
戻り値: 成功すると, 0 を返し,
失敗すると, 0 以外を返す.
*/
#include <stdio.h>
int main(void){
char *oldname = "old.txt";
char *newname = "new.txt";
if(rename(oldname, newname) == 0){
printf("%s から %s に名前を変更/移動した\n", oldname, newname);
}else{
printf("名前の変更/移動に失敗した\n");
}
return 0;
}
|
rename.c の実行結果は:
[cactus:~/code_c/refer]% ./rename
old.txt から new.txt に名前を変更/移動した
[cactus:~/code_c/refer]% ./rename
名前の変更/移動に失敗した
tmpfile.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /*
stdio.h [tmpfile]
書式: FILE *tmpfile(void)
機能: 一時ファイル (テンポラリファイル) の作成
引数: なし
戻り値: 成功すると, 一時ファイルポインタを返し,
失敗すると, NULL を返す.
*/
#include <stdio.h>
int main(void){
FILE *fp;
char buf[100];
char *str = "Hello Tempfile!\nテンポラリファイルテスト";
fp = tmpfile();
if(fp == NULL){
printf("一時ファイル作成に失敗した\n");
return -1;
}else{
printf("一時ファイルを作成した\n");
}
fputs(str, fp); /* 一時ファイルに文字列を書き込む */
rewind(fp); /* ファイル位置を先頭に戻す */
/* 一時ファイルから文字列を読み込む */
while( fgets(buf, 100, fp) != NULL){
printf("%s\n", buf);
}
return 0;
}
|
tmpfile.c の実行結果は:
cactus:~/code_c/refer]% ./tmpfile
一時ファイルを作成した
Hello Tempfile!
テンポラリファイルテスト
tmpnam.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /*
stdio.h [tmpnam]
書式: char *tmpnam(char *name)
機能: 一時ファイル (テンポラリファイル) の作成
引数: char *name: L_tmpnam バイト数の配列に一時ファイルを格納
戻り値: 引数に NULL を入れると, 戻り値に一時ファイル名を返す.
*/
/*
L_tmpnam とは, 一時ファイル名のバイト数の最大値で,
#define L_tmpnam で定義されている.
また, 一時ファイル名を作成できる上限個数は,
#define TMP_MAX で定義されている.
*/
#include <stdio.h>
int main(void){
int i;
char fname[L_tmpnam];
for(i = 0; i < 5; i++){
tmpnam(fname);
printf("%s\n", fname);
}
return 0;
}
|
tmpnam.c の実行結果は:
[cactus:~/code_c/refer]% ./tmpnam
/var/tmp/tmp.0.jWrqJ4
/var/tmp/tmp.1.hCUxpj
/var/tmp/tmp.2.vHqyDu
/var/tmp/tmp.3.FKp2qZ
/var/tmp/tmp.4.yZ679Y
ferror.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /*
stdio.h [ferror]
書式: int ferror(FILE *fp)
機能: ファイルのエラー状態を判定する
引数: FILT *fp: ファイル (ストリーム) ポインタ
戻り値: エラーの場合は, 0 以外を返し,
正常な場合は, 0 を返す.
*/
/*
feof
書式: int feof(FILE *fp)
機能: ファイルの終端 (EOF) 判定を行う
引数: FILE *fp: ファイル (ストリーム) ポインタ
戻り値: 終端の場合は, 0 以外を返し,
終端でない場合, 0 を返す.
*/
/*
clearerr
書式: void clearerr(FILE *fp)
機能: エラー状態をクリアする
引数: FILE *fp: ファイル (ストリーム) ポインタ
戻り値: なし
*/
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp;
char *fname = "ferror.txt";
int c;
if( (fp = fopen(fname, "w") ) == NULL ) {
fprintf(stderr,"ファイルオープンエラー\n");
exit(EXIT_FAILURE);
}
/* ファイル読み込み */
c = fgetc(fp);
if( ferror(fp) != 0 ){
/* エラー発生 */
printf("ファイルエラーが発生しました\n");
/* エラー指示子をクリア */
clearerr(fp);
}
fclose(fp);
return 0;
}
|
ferror.c の実行結果は:
[cactus:~/code_c/refer]% ./ferror
ファイルエラーが発生しました