1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBSDC-currentで新たに追加される新機能を試してみる

Posted at

NetBSD Advent Calendar 2023 5日目の記事です。今日はNetBSD-10(というかNetBSD-currentで確認した)新機能を試してみようと思います。

NetBSD-10に搭載されるであろう新機能

昨日の記事で紹介した、来るべきNetBsd-10に搭載されるであろう新機能をためしてみようと思います。

# find /usr/share/man/ -type f \
    | grep '\.[0-9]' \
    | xargs grep -A1 'first appeared in' \
    | grep '.Nx 10\.0' \
    | sed -e "s/-.*$//"
...
/usr/share/man/man1/scmdctl.1
/usr/share/man/man2/getrandom.2
/usr/share/man/man2/poll.2
/usr/share/man/man2/pollts.2
/usr/share/man/man2/ppoll.2

NetBSDのソースツリーを辿ると、システムコール的には getrandom(2)ppoll(2) が新たに追加されているようです。

getrandom(2)

getrandom(2)はLinux 3.17で追加された機能ですが、これが新たにNetBSD-10で利用できるようです。サンプルコードは以下になります。

#include <sys/random.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        uint8_t secretkey[32];
        ssize_t ret;

        ret = getrandom(secretkey, sizeof(secretkey), GRND_RANDOM);
        if (ret == -1) {
                err(EXIT_FAILURE, "getrandom");
        }

        for (int i = 0; i < sizeof(secretkey); i++) {
                printf("%02x:", secretkey[i]);
        }
        putchar('\n');

        exit(EXIT_SUCCESS);
}

実行結果は以下になります。

:c5:64:66:d1:65:38:d9:32:fb:60:ea:0e:3e:79:77:40:07:4b:76:4d:77:35:

pploll(2)も追加されました

ppoll(2)も追加されています。サンプルコードは以下になります。どうやら ppoll(2) はLinux独自のシステムコールのようで今回新たにNetBSDに追加されたシステムコールのようです。

#include <err.h>
#include <poll.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        struct pollfd fds[1];
        struct timespec timeout = {0, 0};
        int r, len;

        char buf[BUFSIZ];

        fds[0].fd = fileno(stdin);
        fds[0].events = POLLRDNORM;
        fds[0].revents = 0;

        while ((r = ppoll(fds, 1, &timeout, NULL)) != -1) {
                if (fds[0].revents & POLLRDNORM) {
                        len = read(fds[0].fd, buf, sizeof(buf));
                        puts(buf);
                }
        }

        exit(EXIT_SUCCESS);
}

まとめ

来るべきNetBSD-10に搭載される機能を調べてみました。 getrandom(2)ppoll(2) といった、Linuxのシステムコールとの互換性を保つ機能が追加されているようです。BSDユーザ個人としては、それが良いことなのかどうなのかは判断しかねますが…😖(互換性が高まるのはよいことではあります…)。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?