2016-11-03 3 views
0

ここでは、ファイルを開いてその最後の文字を変更する解決策があります。私はこの仕組みがどういうものか分かりません。説明していただけますか?C - ファイルを変更する

​​

いいえ、この部分はファイルを開き、正常に動作しない場合は返されます。 最初の質問:ファイルが整数(int handle)を開いているのはなぜですか?何がそこに保存されていますか?

char c='N'; 
    lseek(handle, -2*sizeof(c), SEEK_END); 

lseek明らかにリーダーの位置が変わります。だから私はこれが読者をファイルの最後に設定していると思います(SEEK_END)。しかし、なぜただ一つの文字を書こうとするのであれば、オフセットは-2*sizeof(c)でなければなりませんか?

write(handle, &c, sizeof(c)); 
    close(handle); 
} 

私はこの最後の部分を理解しています。

ありがとうございました!

+3

_Whyファイルが整数(intハンドル)を開いていますか?_:APIが定義されているためです。 _それに格納されているのは?_:開いているファイルを識別する不透明な値です。あなたがそのハンドルで行うことができる唯一のことは、読み込みや書き込みなどのファイル操作に使用し、ファイルを 'close'で閉じることです。 –

+2

最後に改行を含むテキストファイルですか? '-1'は最後の文字(EOFの最初の文字)、' -2'は改行をスキップします... –

+1

開いているファイルを返すintはファイル記述子です。お使いのOSは、プロセスの開いているファイルとそのディスクリプタを認識しています。カーネルは、各プロセスで開いているファイルごとに独自の構造体を保持します。 lseek(3)はSEEK_ENDを指定すると、カーソルをfile + offsetの最後に移動します。 https://linux.die.net/man/3/lseek –

答えて

0
  1. 通常、ファイル記述子はopen()によって返され、整数です。 0と1は通常は標準I/Oです。

  2. ファイルサイズ - 2オクテットは最後の文字/バイトのオフセットです。

関連する問題