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

回答編集履歴

2

誤字修正

2019/05/01 03:11

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -8,10 +8,10 @@
8
8
  |a+|読み追加両用|読み込み+追加。ポインタはファイルの先頭。書き込みする場合は常にファイル末尾に追加される|
9
9
 
10
10
  + を付けると読み・書きのもう一方の処理も可能になる、という機能を持っています。
11
- ですので、w+ でオープンすると読み込みが可能になるのですが、初期状態では(当然ながらファイルが切り捨てられているので)違いがありません。
11
+ ですので、w+ でオープンすると読み込みが可能になるのですが、初期状態では(当然ながらファイルが切り捨てられているので)w と違いがありません。
12
12
 
13
13
  違いはファイル操作の途中にあります。
14
- w+ であればファイルシークして「一度書いたものを読み込む」ことができる、のです。
14
+ w+ であれば w と違い、ファイルシークして「一度書いたものを読み込む」ことができる、のです。
15
15
 
16
16
  ```PHP
17
17
  <?php

1

サンプルコードを追加

2019/05/01 03:11

投稿

tacsheaven
tacsheaven

スコア13707

answer CHANGED
@@ -1,5 +1,3 @@
1
- もともとは UNIX のシステムコールまで遡ることになりますが、詰まるところは「他のオプションとの整合性を取ったため」ではないかと思います。
2
-
3
1
  |オプション|意味|詳細|
4
2
  |:--:|:--|:--|
5
3
  |r|読み込み専用|読み込みのためにオープン。書き込み不可。ポインタはファイルの先頭|
@@ -9,5 +7,36 @@
9
7
  |w+|読み書き両用|読み書き両用。ポインタはファイルの先頭。既存ファイルは切り詰められる|
10
8
  |a+|読み追加両用|読み込み+追加。ポインタはファイルの先頭。書き込みする場合は常にファイル末尾に追加される|
11
9
 
12
- ということで、r と a には + を付けるで、もう一方の処理も可能にるという機能になっています。
10
+ + を付けると読み・書きのもう一方の処理も可能にという機能を持っています。
13
- これと整合性を取る目的で、w にも(実際には意味がな)+ 許可されている、とう事かと思い
11
+ すので、w+ でオープンすると読み込みが可能なるのです、初期状態では(当然ながらファイル切り捨てられているので)違がありせん
12
+
13
+ 違いはファイル操作の途中にあります。
14
+ w+ であればファイルシークして「一度書いたものを読み込む」ことができる、のです。
15
+
16
+ ```PHP
17
+ <?php
18
+
19
+ $fp = fopen('./fopen.txt', 'w+');
20
+ fwrite($fp, "ABCDE\n");
21
+ fflush($fp);
22
+ fseek($fp, 0, SEEK_SET);
23
+ echo fgetc($fp);
24
+ fclose($fp);
25
+
26
+ ?>
27
+ ```
28
+ この結果は 'A' が出力されます。
29
+
30
+ ```PHP
31
+ <?php
32
+
33
+ $fp = fopen('./fopen.txt', 'w');
34
+ fwrite($fp, "ABCDE\n");
35
+ fflush($fp);
36
+ fseek($fp, 0, SEEK_SET);
37
+ echo fgetc($fp);
38
+ fclose($fp);
39
+
40
+ ?>
41
+ ```
42
+ こちらだと何も表示されません。