ふつうのLinuxプログラミングをやってみる その１

有名な本らしいので買ってみました

<a target="_blank" href="https://www.amazon.co.jp/gp/product/4797328355/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4797328355&linkCode=as2&tag=lespacetranqu-22&linkId=b690c3257ff896f2239f1107e5bf95a4">ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道</a>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/B075ST51Y5/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B075ST51Y5&linkCode=as2&tag=lespacetranqu-22&linkId=aa0915aa60afe5a385a365f9059a2877">ふつうのLinuxプログラミング 第2版　Linuxの仕組みから学べるgccプログラミングの王道</a>


> ふつうのLinuxプログラミングをやってみる その１
https://qiita.com/uturned0/items/b9ae846f2aff5865c074
ふつうのLinuxプログラミングをやってみる その2
https://qiita.com/uturned0/items/56beac990cdd6f1059ed
ふつうのLinuxプログラミングをやってみる その3
https://qiita.com/uturned0/items/675092da8aa89c4b1ff0
その４
https://qiita.com/uturned0/items/8f5765cfc0f0be8a1981
その５
https://qiita.com/uturned0/items/ab97deb489c994a836da
その６
https://qiita.com/uturned0/items/b7df48e87ae9170f3698
その７
https://qiita.com/uturned0/items/263151cf7c83bff7fac1
その７−３
https://qiita.com/uturned0/items/3fbf3ed6bb2a47325f59

---

ただのメモ書きです

# chapter 1
## 引数を使う

```c
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
  int i;

  printf("argc=%d\n",argc);
  for (i=0;i < argc; i++) {
    printf("argv[%d]=%s \n", i, argv[i]);
}
  exit(0);
}
```

### result
```ruby
$ gcc -Wall -O2 args.c  && ./a.out a b "c d"
argc=4
argv[0]=./a.out
argv[1]=a
argv[2]=b
argv[3]=c d
```

option

```ruby
-Wall デバッグ情報をいい感じに出す
-O2 コンパイルが早くなるらしい。 -O3 が一番早いんだけどおすすめじゃないらしい
```



## manの見方

`man printf` だと普通はコマンド（ユーザコマンド）の printf が出てくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24737/0165199e-9fa1-d46a-8eeb-2938fcfc0d85.png)

`man 3 printf` すると、ライブラリ関数の printf が出てくる。同じ名前だが違うもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24737/3d6b7fb7-0907-3009-8a12-f393d0171b3e.png)

linuxのmanはcの関数まで引くことができるのだった。`man strlen` すると strlen(3) がヒットする。user commandではないので、bashにstrlenと打っても使えない。あくまで c-langの中で記述するもの。


### linux man のセクション分け
```ruby
1   実行プログラム または シェルコマンド
2   システムコール（カーネルが提供している関数）
3   ライブラリーコール（プログラムライブラリ内の関数）
4   特殊ファイル（通常 /dev にあるファイル）
5   ファイルフォーマット と 規約（例 /etc/passwd）
6   ゲーム
7   その他（マクロパッケージや規約）
8   システム管理コマンド（通常はrootのみが使う）
9   カーネルルーチン [非標準]
```
> https://laboradian.com/basic-usage-of-man-command-on-linux/


` man 5 passwd` を打つと、passwd コマンドじゃなくて `/etc/passwd` ファイルの説明が出る。ほえ〜〜〜

### manを日本語にする

英語読める方ではありますがこの件モチベ低いので日本語でやろうかと。

```
sudo yum install man-pages-ja
export LANG=ja_JP.utf8
man 5 passwd
```

日本語になりました。これは勉強になりそう。man読めってのはこういうことなんだろうな
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24737/06632354-3b56-20ff-2053-3a47e95effef.png)


chapter 1 おわり


---

この本を読みながらやってます


<a target="_blank" href="https://www.amazon.co.jp/gp/product/4797328355/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4797328355&linkCode=as2&tag=lespacetranqu-22&linkId=b690c3257ff896f2239f1107e5bf95a4">ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道</a>
<a target="_blank" href="https://www.amazon.co.jp/gp/product/B075ST51Y5/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B075ST51Y5&linkCode=as2&tag=lespacetranqu-22&linkId=aa0915aa60afe5a385a365f9059a2877">ふつうのLinuxプログラミング 第2版　Linuxの仕組みから学べるgccプログラミングの王道</a>