selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

ふつうのLinuxプログラミング読書 (1章)

第1章は下記のような構成になっています

  • この本で学ぶことができること
  • C言語開発の一通りの手順
  • 情報の探し方と基礎知識について

それぞれについて、簡単にまとめます

この本で学べる内容

Linuxを構成するものやその世界を見て、Linuxに関する常識を身につけることを目的として、下記3点の概念について学びます。

  • ファイルプロセス
  • プロセス
  • ストリーム

この3点を選んだ理由は、この3つがLinux世界を構成する重要な概念だからです。

C言語開発の一通りの手順

ここでは下記の内容について学びます

gccを使ったビルド

# -o optionでビルドされるプログラム名を指定する
gcc -o ${ビルドされるプログラム名} {Cのプログラム名}

github.com

コマンドライン引数

int main (int argc, char *argv[]){
   ...
}

上記のプログラムにコマンドライン引数を与えて実行すると、argc, argvの値は下記のようになります。

$ ./args x y
argc=3
argv[0] = ./args 
argv[1] = x
argv[2] = y

ここで./args * などのグロブを使って、複数の引数を一度に渡すことも可能です。 また、ダブルコーテーションを使うと、コマンドライン変数をまとめることができます。 ./args "*"./args "x y z"と入力した場合、"*" や "x y z" も1つのコマンドライン引数とみなされます。

情報の探し方と基礎知識

cプログラミングで情報を集める際、manコマンドが便利です。 例えば、man strlen とすると、下記のような出力が得られます。

STRLEN(3)                BSD Library Functions Manual                STRLEN(3)

NAME
     strlen, strnlen -- find length of string

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>

     size_t
     strlen(const char *s);

     size_t
     strnlen(const char *s, size_t maxlen);
...

printfのように、コマンドや関数など、複数のセクションに同じ名前のページが存在する場合、man printf と入力すると下記のような出力が得られます。

PRINTF(1)                 BSD General Commands Manual                PRINTF(1)

NAME
     printf -- formatted output

SYNOPSIS
     printf format [arguments ...]
...
SEE ALSO
     echo(1), printf(3)

PRINTF(1)の(1)はコマンドを示します。STRLEN(3) の (3)は関数を示します。 LinuxUnixの世界では、この使われ方はよく出るので覚えておいて損は無いです。その他にも man png と入力するとpngのフォーマットが出力されたりします。表にすると下記の通りです。

1: ユーザーコマンド ( man printf)
2: システムコール (次の章で説明)
3: ライブラリ関数 (`man 3 printf` or `man strlen`)
4: デバイスファイル (`man tcp`)
5: ファイルフォーマット (`man png`)

まとめ

以上、この本で学べる内容、C言語でのビルドから、コマンドの調べ方まで、Linuxの世界を学ぶために必要な道具を渡される感じの1章でした。