有名な本らしいので買ってみました
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるgccプログラミングの王道
ふつうのLinuxプログラミングをやってみる その1
https://qiita.com/uturned0/items/b9ae846f2aff5865c074
ふつうのLinuxプログラミングをやってみる その2
https://qiita.com/uturned0/items/56beac990cdd6f1059ed
ふつうのLinuxプログラミングをやってみる その3
https://qiita.com/uturned0/items/675092da8aa89c4b1ff0
その4
https://qiita.com/uturned0/items/8f5765cfc0f0be8a1981
その5
https://qiita.com/uturned0/items/ab97deb489c994a836da
その7−3
https://qiita.com/uturned0/items/3fbf3ed6bb2a47325f59
chapter 2
unix -> System V -> Solaris
unix -> bsd -> FreeBSD, mac os x
linuxはゼロから作られた。が、仕様がsystem v/bsd に似ている
あくまでゼロから作ってるからlinuxはunixじゃないっていうアレか
現在はお互いに機能を取り入れている 互いを似たものにする標準規格が POSIX
Linux OS と Linux Kernel は違うもの。linux = linux kernel
カーネルはたったひとつのプログラム。 vmlinuz
がそのプログラムひとつ。
ls /boot/vmlinuz-3.10.0-xxx.el7.x86_64
Linus大王が見てる(た)のはkernelだけ。
ハードウェアと直接やり取りできるのはカーネルだけ。device driverは kernelだけ に入ってるから。
kernelの機能を使うものをシステムコールと呼ぶ。open/read/write etc
chapter 2.2
ライブラリ関数とシステムコールは違うものだが境界はあいまい。
ライブラリ関数 printf(3) は write() システムコールを使っている。
ライブラリ関数 strlen(3) はシステムコールを使っていない、単体で完結している
man 1 write
コマンドのwrite
man 2 write
システムコールのwrite
早速恐ろしいことが書いてありましたよ
注意
write() が成功して返ってきても、 データがディスクに記録されたことを保証するものではない 。 実際、データのためのスペースが確保されたことすら保証されないというバグっぽい実装もある。
実装はman必須感あるね
libc
標準C library 通称 libc がめっちゃ大事
$ ll /lib/libc.so.6
lrwxrwxrwx. 1 root root 12 2019-10-01 18:58:09 /lib/libc.so.6 -> libc-2.17.so
liunx では GNU libc 略して glibc ぐりぶしー より じーりぶしー ぽい
libc.so.2 とかも /libs にあるのは全部Cのライブラリ。これはLinuxじゃない人が管理してる
libc.so.6は数学的な関数が入ってる
chapter 2 おわり