ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道 / 青木 峰郎
https://scrapbox.io/files/671e0be37d2047ca51df8db1.png
第1部 Linuxの仕組み
第1章 Linuxプログラミングを始めよう
第2章 Linuxカーネルの世界
第3章 Linuxを描き出す3つの概念
第4章 Linuxとユーザ
第2部 Linuxプログラミングの根幹
第5章 ストリームにかかわるシステムコール
第6章 ストリームにかかわるライブラリ関数
第7章 headコマンドを作る
第8章 grepコマンドを作る
第9章 Linuxのディレクトリ構造
第10章 ファイルシステムにかかわるAPI
第11章 プロセスとハードウェア
第12章 プロセスにかかわるAPI
第13章 シグナルにかかわるAPI
第14章 プロセスの環境
第3部 Linuxネットワークプログラミング
第15章 ネットワークプログラミングの基礎
第16章 HTTPサーバを作る
第17章 HTTPサーバを本格化する
第18章 本書を読み終えたあとは
メモ
Linuxは以下の4つのシステムコールでほぼ語り尽くせる
ストリームからバイト列を読み込むread
ストリームにバイト列を書き込むwrite
ストリームを作るopen
用済みのストリームを始末するclose
ファイルディスクリプタ・・・ストリームを指す数字。ストリームはカーネルで管理されるが、ストリームそのものをプロセスに露出することは許されないので数字で対応付けされる
システムコール
lseek・・・ファイルディスクリプタfd内部のファイルオフセットを指定した位置に移動する
dup, dup2・・・ファイルディスクリプタを複製する
ioctl・・・open, read, write, closeでは処理できないデバイスに特化した処理をすべて含む
fcntl・・・ioctlからファイルディスクリプタの操作だけ分離したもの
fgets・・・ストリームを受けとり、bufに結果を書き込む。類似にgetsがあるが、こちらはバッファオーバーフローを引き起こすので使ってはいけない
fputs・・・bufに含まれる文字列をストリームに出力する。putsは出力先が標準出力に限られ、末尾に\nを追加する
printf, fprintf・・・フォーマットして標準出力に出力
scanf・・・フォーマットを指定して入力。セキュリティリスクがあるから使ってはいけない
fread,fwrite・・・固定長の入出力。これらはOSではなく、C言語の関数なので可搬性がある。bufを使わないので他のAPIと並列で実行できる
fseek, fseelo, ftell, ftello, rewind・・・その他的な
fileno・・・引数のstreamがラップしているファイルディスクリプタを返す
fdopen・・・fdをラップするFILE方の値を新しく作成してポインタを返す
fflush・・・streamがバッファリングしている内容を即座にwriteする
feof・・・ストリームのEOFフラグを取得する
ferror, clearerr
第10章 ファイルシステムにかかわるAPI
opendir・・・引数(path)にあるディレクトリを開く。DIRという構造体のポインタを返す
readdir・・・ディレクトリストリームからエントリを一つ読み込む
closedir・・・ディレクトリストリームを閉じる
mkdir
ENOENT・・・親ディレクトリがない
ENOTDIR・・・pathで親ディレクトリに相当する部分がディレクトリではなかった
EEXIST・・・すでにファイルやディレクトリが存在する
EPERM・・・親ディレクトリを変更する権限がない
umask
ファイル・ディレクトリの権限は、mkで渡されたパーミッションとumaskの積の値が設定される。umask関数はumaskの値を変更する
mkdir
link
symlink
readlink
unlink
rename
stat
chmod
chown
utime
第13章 シグナルにかかわるAPI
malloc・・・sizeバイトのメモリをヒープ領域に割り当てて、その先頭へのポインタを返す
calloc・・・nmemb × sizeバイトのメモリをヒープ領域に割り当てて、その先頭へのポインタを返す。割り当てたメモリは0クリアしてあることが保証される
realloc・・・malloc, callocで割り当てたメモリを拡張・縮小する
free
brk
第12章 プロセスにかかわるAPI
fork・・・プロセスを複製し、2つのプロセスに分裂させる
exec・・・自プロセスを新しいプログラムで上書きするシステムコール
wait・・・fork()したプロセスの終了を待つ。子プロセスのうち、どれか一つが終了するのを待つ
exec・・・プロセスの終了
pipe・・・両端ともに自プロセスにつながったストリームを生成する。forkと組み合わせて使う
dup・・・ファイルディスクリプタを複製する
popen, pclose
getpid, getppid・・・自分のプロセスIDや親プロセスIDを知ることができる
setpgid・・・プロセスグループIDを変更する
setsid・・・セッション作成する
第15章 ネットワークプログラミングの基礎
クライアント側のソケットAPI
socket・・・引数domain, type, protocolをあわせて何につながるか指定する。ファイルディスクリプタが返却される
connect・・・socketからストリームを伸ばし、アドレス(IPアドレス・ポートなど)を指定する
サーバ側のソケットAPI
bind・・・
listen・・・接続を待つためのソケットであることを伝える
accept・・・sockにクライアントが接続してくれるのを待ち、接続が完了したら接続済みストリームのファイルディスクリプタを返す。