11日目 ファイルアクセス
⛷☃️がすごく降ってましたね。
さいたま市の救急車はノーマルタイヤだったんですね。サイレン鳴らしてたのに徐行すぎて驚きました。
さて、本題に入りますが今日はファイルアクセスをやります、読み書きとかそこらへんです。
Cのファイルアクセスは大抵、ファイル記述子かファイルストリームを使うことになります。
ファイル記述子は低水準関数、
ファイルストリームは(低水準関数で構築された)高水準関数を使用します。
これはプログラミングしやすいor細かいとこまで弄れるかどっちを取るかということです。
今回はファイル記述子中心にやります。
ファイル記述子を使用する関数は
open(),close(),read(),write()の4つ
これらはエラーが発生すると-1を返す仕様です。
ファイルを読み書きするにはまず、オープン(open())します。
open()の引数はファイル名を指すポインタとアクセスモード指定のためのフラグです。(後後勉強します)
ファイル記述子というオープンしてるファイルを識別する固有の値(整数値)を返します。
このファイル記述子はオープンされてるファイルに対するポインタのように機能します。
ほかの関数の引数として使えます。
close()の引数はファイル記述子です。
またread(),write()の引数はファイル記述子、読み込み先や書き込み元のメモリ領域のポインタ、読み書きするバイト数です。
でまあ、ファイル記述子を使った簡易プログラムがこちら
tmp/notesというファイルの内容の末尾にargv[1]を付け足すものです。
確認しましたがうまく動いてます↓
注目すべきは34行目です。
open()の第2、第3引数はフラグです。
これらのフラグははfcntl.hで定義されてます。
0_RDONLY 読み込み専用でオープン
0_WRONLY 書き込み専用でオープン
0_RDWR 読み書き両用でオープン
0_APPEND ファイルの末尾にデータを足す
0_TRUNC ファイルが既に存在していたら、ファイルの長さを0に切り詰める(上書き)
0_CREAT ファイルがなければ作成
といったフラグがあります。
これらは定数で論理和をとって兼用可能です
本ではここから延々とビット演算の説明ですが、一応わかっているつもりなので飛ばします。
内容は薄かったですが今回はここまでにします
次はファイルの権限についてやります。
おやすみなせ