システムコール勉強してる

特に作りたいものがないので陳腐化しない技術ということでシステムコール勉強してる。勉強してるうちに作りたいものができるか、そうでなければ将来困ったときに勉強したことでできたインデックスに引っかかり作ろうというモチベーションになることを期待してる。
システムコールの前にプロセスが曖昧だったのでなるほどUnixプロセスよんだ。
deamon とか prefork とか普段使ってるのでだいたいわかってるつもりだけど一応復習も兼ねて。どっちかって言うと nginx とかのイベント駆動の方が分かってない。イベントループがあってコールバックがあってくらいはわかる。AnyEventは使ったことない。まぁ今回の話とは関係ない。
次にふつうのLinuxプログラミング読んだ。ファイルシステムとかストリームとか基本から載っててよかった。
その後は
読んだ。システムコールをある程度理解した上で読むと Go の Interface は良く出来てるなぁと感じた。
とりあえず、何書かないとすぐにわすれるんだろうなぁと思いhttp server書こうと思ったけどストリームをパースするところで飽きてやめた。これを機に RFC 読むのも良かったかもしれない。けど、とにかくモチベーションがなくなった。
package main

import (
    "fmt"
    "os"
    "syscall"
)

func main() {

    fmt.Println(os.Getpid())

    fd, _ := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM, 0)
    sa := syscall.SockaddrInet4{Port: 8888}
    if err := syscall.Bind(fd, &sa); err != nil {
        fmt.Println(err)
    }
    if err := syscall.Listen(fd, 5); err != nil {
        fmt.Println(err)
    }

    for {

        nfd, _, err := syscall.Accept(fd)
        if err != nil {
            fmt.Println(err)
        }
        buffer := make([]byte, 1024)
        syscall.Read(nfd, buffer)
        fmt.Println(string(buffer))
        syscall.Close(nfd)
    }
}
たった 34 行しかないし、 curl http://localhost:8888 したら
GET / HTTP/1.1
Host: localhost:8888
User-Agent: curl/7.43.0
Accept: */*
が表示されるだけだけだし、レスポンスは返ってこないけど、学びはあったという印象。

次何勉強するか