Blog

pthread のバージョンを確認したいでござる

pthread で NPTL が使われてるかどうか確認したかったのだけど、ただしく確認する方法がよくわからなかったので confstr で調べた。

#include <malloc.h>
#include <stdio.h>
#include <unistd.h>

int main() {
    char *buf;
    size_t n;

    n = confstr(_CS_GNU_LIBPTHREAD_VERSION, NULL, (size_t) 0);
    buf = malloc(n);
    if (buf == NULL) {
        printf("Cannot allocate memory\n");
        return;
    }
    confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, n);
    printf("%s\n", buf);
}

昔の LinuxThreads では SIGUSR1, SIGUSR2 を使っていたりしていてユーザーが SIGUSER[12] 使えないなどの問題があったために、Linux 2.6 以後は NPTL に置き換えられており、もはや動作しているシステムでは殆どの場合、NPTL であると仮定してしまってよいように思う。とくに、新規で何かを作る場合、あえて LinuxThreads をサポートする必要はない。のだと思う。