11日目 ファイルアクセス

⛷☃️がすごく降ってましたね。

さいたま市の救急車はノーマルタイヤだったんですね。サイレン鳴らしてたのに徐行すぎて驚きました。

 

さて、本題に入りますが今日はファイルアクセスをやります、読み書きとかそこらへんです。

 

Cのファイルアクセスは大抵、ファイル記述子かファイルストリームを使うことになります。

ファイル記述子は低水準関数、

ファイルストリームは(低水準関数で構築された)高水準関数を使用します。

 

これはプログラミングしやすいor細かいとこまで弄れるかどっちを取るかということです。

 

今回はファイル記述子中心にやります。

 

ファイル記述子を使用する関数は

open(),close(),read(),write()の4つ

これらはエラーが発生すると-1を返す仕様です。

 

ファイルを読み書きするにはまず、オープン(open())します。

open()の引数はファイル名を指すポインタとアクセスモード指定のためのフラグです。(後後勉強します)

ファイル記述子というオープンしてるファイルを識別する固有の値(整数値)を返します。

このファイル記述子はオープンされてるファイルに対するポインタのように機能します。

 

ほかの関数の引数として使えます。

close()の引数はファイル記述子です。

またread(),write()の引数はファイル記述子、読み込み先や書き込み元のメモリ領域のポインタ、読み書きするバイト数です。

 

でまあ、ファイル記述子を使った簡易プログラムがこちら

f:id:simauma1203:20180124000254p:image

f:id:simauma1203:20180124000314j:image

tmp/notesというファイルの内容の末尾にargv[1]を付け足すものです。

確認しましたがうまく動いてます↓

f:id:simauma1203:20180124000340j:image

 

注目すべきは34行目です。

open()の第2、第3引数はフラグです。

これらのフラグははfcntl.hで定義されてます。

0_RDONLY 読み込み専用でオープン

0_WRONLY 書き込み専用でオープン

0_RDWR 読み書き両用でオープン

0_APPEND ファイルの末尾にデータを足す

0_TRUNC ファイルが既に存在していたら、ファイルの長さを0に切り詰める(上書き)

0_CREAT ファイルがなければ作成

といったフラグがあります。

これらは定数で論理和をとって兼用可能です

 

本ではここから延々とビット演算の説明ですが、一応わかっているつもりなので飛ばします。

 

内容は薄かったですが今回はここまでにします

次はファイルの権限についてやります。

おやすみなせ