53ningen.com

@gomi_ningen's Website

struct と typedef struct

struct と宣言すると変数宣言のときに struct struct_name variable_name という形で書かないといけない。たとえば以下のような感じ。

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

struct hoge {
    int fuga;
};

int main(int argc, char *argv[]) {
    struct hoge h;
    h.fuga = 1;
    printf("%d\n", h.fuga);
    exit(0);
}

もし struct hoge h ではなく hoge h と書いたら以下のようにエラーがでます。

$ make
mkdir -p bin
gcc ./src/main.c -o ./bin/main -Wall
./src/main.c: In function ‘main’:
./src/main.c:9:5: error: unknown type name ‘hoge’
     hoge h;
     ...
Read More

関数の引数の void

引数を取らないことを表明するために func_name(void) と書くのと func_name() と書くのは何が違うのか。違いを観察してみる。

何もかかないとき

次のようなコードをコンパイルすると通ってしまう。

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

void do_nothing() {
}

int main(int argc, char *argv[]) {
    do_nothing("hoge");
    exit(0);
}

コンパイルして実行してみる。

$ make
mkdir -p bin
gcc ./src/main.c -o ./bin/main -Wall
$ ./bin/main
$

引数を void とした場合

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

void do_nothing(void) {
}

int main(int argc, char *argv[]) {
    do_nothin...
Read More

C 言語のダイグラフ

C 言語にはダイグラフとよばれる環境により存在しない記号の代替となる記法を提供している。2 文字のトークンで 6 種類ある。

  • <: => [
  • :> => ]
  • <% => {
  • %> => }
  • %: => #
  • %:%: => ##

例えば、以下のような簡単なソースコードがあったとする。

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

int main(int argc, char *argv[]) {
    int hoge[] = { 123 };
    printf("%d\n", hoge[0]);
    exit(0);
}

これは普通に動作するコードです。

$ mkdir -p bin
gcc ./src/main.c -o ./bin/main -Wall
$ ./bin/main.c
123

このソースコードをダイグラフを使ったものに差し替えてみる。

%:include <stdio.h>
%:include <s...
Read More

arping コマンドを実装する (1)

arping コマンドを実装した経験がなかったので、実装コードをカンニングしながらエッセンスを抽出して、動く簡易 arping コマンドを実装していきます。

参考にする arping の実装

手元環境の arp のパッケージを以下のようにして確認します。

$ rpm -qf /sbin/arping
iputils-20121221-7.13.amzn1.x86_64

というわけで、iputils の実装を参考にします。

$ git clone git@github.com:iputils/iputils.git
$ cd iputils
$ vi ./arping.c

arp の様子をみる

ARP は IPv4 アドレスと MAC アドレスの対応を確認するためのプロトコルで、例えば 192.168.2.128 にリクエストを送ろうとしたとき、それに対応するイーサネットフレームの宛先 MAC アドレスが知りたくなります。

初めて送る相手の場合 IPv4 アドレスに対応する MAC アドレスは当然わからないので ARP Requ...

Read More

ping コマンドを実装する (1)

ping コマンドを実装したことがなかったのでやっただけの記録です。

実際には「ソースコードで体感するネットワークの仕組み」という本のファーストステップとして仮想 IP ホストの実装があるのですが、その前に ping クライアントを実装しておくとスラスラすすみそうだなと思ったので、やってみました。

わたしは邪悪な人間なのでまず最初にカンニングします。ping のソースコードを次のような手順で手に入れました。

$ rpm -qf /bin/ping
iputils-20121221-7.13.amzn1.x86_64

$ yumdownloader --source iputils
Loaded plugins: priorities, update-motd, upgrade-helper
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
Enabling epel-source repository
amzn-m...
Read More

Docker でドカーンとやるハンズオン 入門編

  • Docker でドカーンってやる入門ハンズオン資料
    • docker, docker-compose のキホンがわかるように書いた

Docker とは

  • 仮想化ソフトウェアを使わずリソースを隔離し、仮想 OS を稼働させる、コンテナ型の仮想化技術
  • オーバーヘッドが少なく、高速でマシンリソースも少量で済む
  • 対して Virtual Box はハードウェアをソフトウェアでエミュレーションしているホスト OS 型の仮想化技術
    • Host OS の上に仮想化ソフトウェア/ゲスト OS という階層構造になるためオーバーヘッドが大きい

MacOS 上での Docker

  • Docker for Mac は Hypervisor.framework を利用してコンテナがなるべく直接ハードウェアを制御できるようにしているため、オーバーヘッドが抑えられている
Read More

イベント遠征ブログのススメ

<!-- コロナビール直缶動画アップお待ちしております -->

楽しいのでおすすめです。

イベントに行ったあとにみなさん感情が溢れ出していて、タイムラインがエモーショナルな感じになりますが、ブログにまとめておくと、あとから見返したときに、そのときの気持ちが少しだけ思い出せます。

とくに遠くにでかけたとき、乗ったバス・電車の写真、食べたもの、イベント会場の外観、こういうものを見るだけで、あとから見返したときにより強く思い出を想起することができる気がしています。

チケット 1 枚 7,800 円とその会場まで移動するために費やしたお金、そしてその時間をそのイベントのために割いた体験をより強く、心に刻むために、誰かに見てもらう文章や写真じゃなく自分のためにブログを残してもよいかなと思えた人は、気楽にやってみると半年後読み返したときに結構楽しいのでオススメです。

あと、自分がみなさんの長文エモエモブログを読みたいのでみんな書いてください。

ちなみにアイキャッチの画像は、とあるイベントで訪れたハーモニーホール座間のカレー食べ放題の張り紙です。カレー待機列、楽しかった。 ...

Read More

Copyright © 53ningen.com