teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

質問者の「読んでいるファイルに対してポインタの位置を特定するにはどうすればいいですか? 」のコメントを受けて追記。

2020/07/23 07:07

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -3,4 +3,13 @@
3
3
  最初にfopen()関数でファイルをオープンした際にFILE構造体のポインタが返されて、
4
4
  その後のファイルアクセス関数はすべてそのファイル構造体のポインタを指定して操作すると思いますが、
5
5
  アクセスに必要な情報は基本的にはFILE構造体の中に入っています。
6
- (…という理解で今のところは十分だと思いますが、より厳密にいうとFILE構造体だけでなくファイルディスクリタという識別子で繋がれているファイル情報がカーネル側にあります。)
6
+ (…という理解で今のところは十分だと思いますが、より厳密にいうとFILE構造体だけでなくファイルディスクリタという識別子で繋がれているファイル情報がカーネル側にあります。)
7
+
8
+ ※追記
9
+ > 読んでいるファイルに対してポインタの位置を特定するにはどうすればいいですか?
10
+
11
+ オープン中のファイルにおいて現在先頭から何バイト目を読み込んでいるか?を知りたいということでしょうか?
12
+ その目的ならばfgetpos()は使えません。
13
+ fgetpos(),fsetpos()で使用されているfpos_t型の変数から現在の読み込み位置を取得することは出来ません。
14
+ fgetpos()で現在の読み込み位置を記録して、後でfsetpos()で読み込み位置を記録した位置へ戻すという使い方が想定されています。
15
+ 代わりにftell()を使用してください。ftell()を使用すれば現在の読み込み位置が返ってきます。

2

厳密な説明としてファイルディスクリプタについて言及。

2020/07/23 07:07

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  最初にfopen()関数でファイルをオープンした際にFILE構造体のポインタが返されて、
4
4
  その後のファイルアクセス関数はすべてそのファイル構造体のポインタを指定して操作すると思いますが、
5
- アクセスに必要な情報は基本的にはFILE構造体の中に入っています。
5
+ アクセスに必要な情報は基本的にはFILE構造体の中に入っています。
6
+ (…という理解で今のところは十分だと思いますが、より厳密にいうとFILE構造体だけでなくファイルディスクリタという識別子で繋がれているファイル情報がカーネル側にあります。)

1

誤字修正。

2020/07/22 11:47

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -1,5 +1,5 @@
1
- fgetpos()やfsetpos()の第一引数で指定するFILE構造体のポインタの中に読み込み位置の情報が入っています。
1
+ fgetpos()やfsetpos()の第一引数で指定するFILE構造体のポインタの中に読み込み位置の情報が入っています。
2
2
 
3
3
  最初にfopen()関数でファイルをオープンした際にFILE構造体のポインタが返されて、
4
- その後のファイルアクセス関数はすべてそのファイル構造体のポインタを指定して操作すると思いますが、
4
+ その後のファイルアクセス関数はすべてそのファイル構造体のポインタを指定して操作すると思いますが、
5
5
  アクセスに必要な情報は基本的にはFILE構造体の中に入っています。