[インデックス 13579] ファイルの概要
このコミットは、Go言語のsyscall
パッケージにおいて、NetBSDオペレーティングシステム向けの新しいシステムコール番号を追加するものです。具体的には、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
の2つのファイルが更新され、NetBSDの最新版(NetBSD-current)で導入された__QUOTACTL
、POSIX_SPAWN
、RECVMMSG
、SENDMMSG
の4つのシステムコールがGoから利用できるようになります。これにより、GoプログラムがNetBSD環境でこれらの低レベルなOS機能と連携できるようになり、より高度なシステムプログラミングが可能になります。
コミット
commit 8efb70f92e258d458c183232b985c83b477ed3de
Author: Benny Siegert <bsiegert@gmail.com>
Date: Sun Aug 5 17:02:41 2012 -0400
syscall: add some new syscall numbers from NetBSD-current
R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/8efb70f92e258d458c183232b985c83b477ed3de
元コミット内容
syscall: add some new syscall numbers from NetBSD-current
R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100
変更の背景
Go言語は、クロスプラットフォーム対応を重視しており、様々なオペレーティングシステム上で動作するように設計されています。Goプログラムが特定のOSの低レベルな機能を利用するためには、そのOSが提供するシステムコールをGoのsyscall
パッケージを通じて呼び出す必要があります。
このコミットが行われた2012年当時、NetBSDは活発に開発が進められており、新しいシステムコールが継続的に追加されていました。Goのsyscall
パッケージは、各OSのシステムコール定義とGoのインターフェースをマッピングする役割を担っています。NetBSD-current(開発版)で新しいシステムコールが導入された際、Goプログラムがこれらの新機能を活用できるようにするためには、syscall
パッケージにそれらのシステムコール番号と関連する定数を追加する必要がありました。
この変更の背景には、Go言語がNetBSD環境においても最新のOS機能に追従し、開発者がGoでより堅牢で高性能なアプリケーションを構築できるようにするという目的があります。特に、ファイルシステムのクォータ管理、プロセスの生成、効率的なネットワークI/Oといった機能は、多くのシステムプログラミングにおいて不可欠であり、これらをGoから直接利用できることは、GoのNetBSDサポートを強化する上で重要でした。
前提知識の解説
システムコール (System Call)
システムコールは、オペレーティングシステム(OS)が提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。プログラムがファイルI/O、メモリ管理、プロセス制御、ネットワーク通信などのOSの機能にアクセスしたい場合、直接ハードウェアを操作するのではなく、システムコールを介してOSに処理を依頼します。これにより、OSはシステムリソースを安全かつ効率的に管理し、複数のプログラムが協調して動作することを可能にします。
Go言語のsyscall
パッケージは、GoプログラムからOSのシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、Goの標準ライブラリでは提供されていない、OS固有の機能や、より細かな制御が必要な場合に、直接システムコールを利用することができます。
NetBSD
NetBSDは、BSD系UNIXライクなオープンソースのオペレーティングシステムです。その最大の特徴は「Of course it runs NetBSD.」(もちろんNetBSDで動く)というスローガンが示すように、非常に多くのハードウェアアーキテクチャに対応している点です。組み込みシステムから大規模サーバーまで、幅広い環境で利用されています。NetBSDは、堅牢性、セキュリティ、移植性に優れており、活発な開発コミュニティによって継続的に改善されています。
NetBSD-current
NetBSD-currentは、NetBSDの最新の開発ブランチを指します。これは、安定版リリース(NetBSD-RELEASE)とは異なり、最新の機能追加、バグ修正、パフォーマンス改善などが日々取り込まれています。開発者はNetBSD-currentを使用して、次期安定版に導入される予定の機能をテストしたり、最新のOS機能を利用した開発を行ったりします。このコミットは、NetBSD-currentで導入された新しいシステムコールをGoから利用可能にするためのものです。
クォータ管理 (__QUOTACTL
)
ファイルシステムのクォータ管理は、ディスクスペースやinodeの使用量をユーザーやグループごとに制限する機能です。これにより、特定のユーザーやプログラムがディスクスペースを過剰に消費するのを防ぎ、ファイルシステムの安定性と公平性を保つことができます。quotactl
(または__quotactl
)システムコールは、このクォータシステムを制御するためのインターフェースを提供します。例えば、クォータの有効化/無効化、制限値の設定、使用状況の取得などが行えます。
プロセス生成 (POSIX_SPAWN
)
posix_spawn
は、新しいプロセスを生成するためのシステムコールです。従来のfork()
とexec()
の組み合わせに代わるもので、特にリソースが限られた環境や、セキュリティ要件が高い環境で効率的かつ安全にプロセスを生成するために設計されました。posix_spawn
は、新しいプロセスの属性(ファイルディスクリプタ、シグナルマスク、スケジューリングポリシーなど)を細かく制御しながら、単一のシステムコールでプロセス生成とプログラム実行を同時に行うことができます。これにより、fork()
が持つアドレス空間のコピーオーバーヘッドを回避し、パフォーマンスを向上させることが可能です。
効率的なネットワークI/O (RECVMMSG
, SENDMMSG
)
recvmmsg
とsendmmsg
は、複数のメッセージ(データグラム)を一度のシステムコールで送受信するためのシステムコールです。従来のrecvmsg
やsendmsg
が一度に1つのメッセージしか処理できないのに対し、これらのシステムコールは、複数のメッセージをバッチ処理することで、システムコール呼び出しのオーバーヘッドを削減し、ネットワークI/Oの効率を大幅に向上させます。これは、特に高スループットが要求されるネットワークアプリケーション(例: DNSサーバー、リアルタイム通信システム)において非常に有効です。
recvmmsg
: 複数のデータグラムを一度に受信します。sendmmsg
: 複数のデータグラムを一度に送信します。
技術的詳細
このコミットは、Go言語のsyscall
パッケージがNetBSDの特定のシステムコールを認識し、呼び出せるようにするための定数定義を追加しています。Goのsyscall
パッケージは、OSごとに異なるシステムコール番号や構造体を抽象化し、Goプログラムから統一的なインターフェースでOS機能にアクセスできるようにします。
具体的には、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
というファイルが変更されています。これらのファイルは、それぞれ32ビット(i386)と64ビット(amd64)アーキテクチャのNetBSDシステムにおけるシステムコール番号の定義を含んでいます。Goのビルドシステムは、ターゲットアーキテクチャとOSに基づいて適切なzsysnum_*.go
ファイルをコンパイル時に選択します。
追加されたシステムコールは以下の通りです。
SYS___QUOTACTL = 473
: ファイルシステムクォータを制御するためのシステムコール。Goプログラムからディスク使用量の制限や管理が可能になります。SYS_POSIX_SPAWN = 474
: 新しいプロセスを効率的に生成するためのシステムコール。fork
/exec
の代替として、より高速で制御性の高いプロセス起動を提供します。SYS_RECVMMSG = 475
: 複数のUDPデータグラムを一度に受信するためのシステムコール。ネットワークアプリケーションの受信スループットを向上させます。SYS_SENDMMSG = 476
: 複数のUDPデータグラムを一度に送信するためのシステムコール。ネットワークアプリケーションの送信スループットを向上させます。
これらの定数が追加されることで、Goのsyscall
パッケージは、これらのシステムコールに対応するGo関数を生成できるようになります。Go開発者は、これらの関数を呼び出すことで、NetBSDの最新の低レベル機能をGoプログラムから直接利用できるようになります。これは、Goで書かれたシステムツール、ネットワークサーバー、あるいはOSと密接に連携するアプリケーションの開発において、より高度な制御とパフォーマンス最適化を可能にします。
コアとなるコードの変更箇所
変更は、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
の2つのファイルにわたります。両ファイルで、既存のシステムコール定数のリストの末尾に、新しい4つのシステムコール定数が追加されています。
--- a/src/pkg/syscall/zsysnum_netbsd_386.go
+++ b/src/pkg/syscall/zsysnum_netbsd_386.go
@@ -271,4 +271,8 @@ const (
SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
+\tSYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
+\tSYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
+\tSYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
+\tSYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
src/pkg/syscall/zsysnum_netbsd_amd64.go
も同様の変更が加えられています。
コアとなるコードの解説
上記のコードは、Go言語のsyscall
パッケージ内で使用されるシステムコール番号の定数を定義しています。Goのsyscall
パッケージは、各オペレーティングシステムとアーキテクチャの組み合わせに対して、対応するシステムコール番号をGoの定数としてマッピングしています。これにより、GoプログラムはOS固有のシステムコールを、Goの関数呼び出しとして透過的に利用できるようになります。
各行は、SYS_
プレフィックスを持つ定数名と、それに割り当てられた整数値(システムコール番号)、そしてコメントとしてC言語の関数プロトタイプを示しています。このC言語のプロトタイプは、そのシステムコールがどのような引数を取り、どのような値を返すかを示しており、Goのsyscall
パッケージが対応するGo関数を生成する際の参考になります。
const (
: Go言語で複数の定数をまとめて宣言するブロックの開始。SYS_SYMLINKAT = 470
: 既存のシステムコール定数。シンボリックリンクを作成するsymlinkat
システムコール。SYS_UNLINKAT = 471
: 既存のシステムコール定数。ファイルを削除するunlinkat
システムコール。SYS_FUTIMENS = 472
: 既存のシステムコール定数。ファイルのタイムスタンプを変更するfutimens
システムコール。SYS___QUOTACTL = 473
: 新しく追加されたシステムコール定数。ファイルシステムクォータを制御する__quotactl
システムコール。SYS_POSIX_SPAWN = 474
: 新しく追加されたシステムコール定数。新しいプロセスを生成するposix_spawn
システムコール。SYS_RECVMMSG = 475
: 新しく追加されたシステムコール定数。複数のメッセージを一度に受信するrecvmmsg
システムコール。SYS_SENDMMSG = 476
: 新しく追加されたシステムコール定数。複数のメッセージを一度に送信するsendmmsg
システムコール。)
: 定数宣言ブロックの終了。
これらの定数が追加されることで、Goのコンパイラは、Goプログラム内でsyscall.SYS___QUOTACTL
などの定数が参照された際に、対応するNetBSDのシステムコール番号に解決できるようになります。これにより、Goのsyscall
パッケージが提供する低レベルな関数(例: syscall.Syscall
, syscall.RawSyscall
)を通じて、これらの新しいシステムコールを呼び出すことが可能になります。
関連リンク
- Go言語の
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD公式サイト: https://www.netbsd.org/
- POSIX
posix_spawn
に関する情報: https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html - Linux man-pages project (recvmmsg): https://man7.org/linux/man-pages/man2/recvmmsg.2.html (NetBSDのmanページが見つからない場合、Linuxのmanページも参考になります)
- Linux man-pages project (sendmmsg): https://man7.org/linux/man-pages/man2/sendmmsg.2.html (NetBSDのmanページが見つからない場合、Linuxのmanページも参考になります)
参考にした情報源リンク
- Go言語のソースコード (GitHub): https://github.com/golang/go
- NetBSDの公式ドキュメントやメーリングリストアーカイブ (具体的なURLは検索結果による)
- 各種OSのシステムコールに関する技術文書やmanページ
- Stack Overflowや技術ブログなど、関連する技術情報が議論されているオンラインリソース
- Go CL 6454100: https://golang.org/cl/6454100 (コミットメッセージに記載されているGoのコードレビューシステムへのリンク)
- NetBSDのソースコード (特に
sys/syscall.h
や関連するファイル): https://cvsweb.netbsd.org/bsdweb.cgi/src/sys/ (NetBSDのシステムコール定義の確認に利用) - Wikipedia: システムコール, NetBSD, POSIX_SPAWN, recvmmsg, sendmmsg```markdown
[インデックス 13579] ファイルの概要
このコミットは、Go言語のsyscall
パッケージにおいて、NetBSDオペレーティングシステム向けの新しいシステムコール番号を追加するものです。具体的には、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
の2つのファイルが更新され、NetBSDの最新版(NetBSD-current)で導入された__QUOTACTL
、POSIX_SPAWN
、RECVMMSG
、SENDMMSG
の4つのシステムコールがGoから利用できるようになります。これにより、GoプログラムがNetBSD環境でこれらの低レベルなOS機能と連携できるようになり、より高度なシステムプログラミングが可能になります。
コミット
commit 8efb70f92e258d458c183232b985c83b477ed3de
Author: Benny Siegert <bsiegert@gmail.com>
Date: Sun Aug 5 17:02:41 2012 -0400
syscall: add some new syscall numbers from NetBSD-current
R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/8efb70f92e258d458c183232b985c83b477ed3de
元コミット内容
syscall: add some new syscall numbers from NetBSD-current
R=golang-dev
CC=golang-dev
https://golang.org/cl/6454100
変更の背景
Go言語は、クロスプラットフォーム対応を重視しており、様々なオペレーティングシステム上で動作するように設計されています。Goプログラムが特定のOSの低レベルな機能を利用するためには、そのOSが提供するシステムコールをGoのsyscall
パッケージを通じて呼び出す必要があります。
このコミットが行われた2012年当時、NetBSDは活発に開発が進められており、新しいシステムコールが継続的に追加されていました。Goのsyscall
パッケージは、各OSのシステムコール定義とGoのインターフェースをマッピングする役割を担っています。NetBSD-current(開発版)で新しいシステムコールが導入された際、Goプログラムがこれらの新機能を活用できるようにするためには、syscall
パッケージにそれらのシステムコール番号と関連する定数を追加する必要がありました。
この変更の背景には、Go言語がNetBSD環境においても最新のOS機能に追従し、開発者がGoでより堅牢で高性能なアプリケーションを構築できるようにするという目的があります。特に、ファイルシステムのクォータ管理、プロセスの生成、効率的なネットワークI/Oといった機能は、多くのシステムプログラミングにおいて不可欠であり、これらをGoから直接利用できることは、GoのNetBSDサポートを強化する上で重要でした。
前提知識の解説
システムコール (System Call)
システムコールは、オペレーティングシステム(OS)が提供するサービスを、ユーザー空間で動作するプログラムが利用するためのインターフェースです。プログラムがファイルI/O、メモリ管理、プロセス制御、ネットワーク通信などのOSの機能にアクセスしたい場合、直接ハードウェアを操作するのではなく、システムコールを介してOSに処理を依頼します。これにより、OSはシステムリソースを安全かつ効率的に管理し、複数のプログラムが協調して動作することを可能にします。
Go言語のsyscall
パッケージは、GoプログラムからOSのシステムコールを直接呼び出すための低レベルなインターフェースを提供します。これにより、Goの標準ライブラリでは提供されていない、OS固有の機能や、より細かな制御が必要な場合に、直接システムコールを利用することができます。
NetBSD
NetBSDは、BSD系UNIXライクなオープンソースのオペレーティングシステムです。その最大の特徴は「Of course it runs NetBSD.」(もちろんNetBSDで動く)というスローガンが示すように、非常に多くのハードウェアアーキテクチャに対応している点です。組み込みシステムから大規模サーバーまで、幅広い環境で利用されています。NetBSDは、堅牢性、セキュリティ、移植性に優れており、活発な開発コミュニティによって継続的に改善されています。
NetBSD-current
NetBSD-currentは、NetBSDの最新の開発ブランチを指します。これは、安定版リリース(NetBSD-RELEASE)とは異なり、最新の機能追加、バグ修正、パフォーマンス改善などが日々取り込まれています。開発者はNetBSD-currentを使用して、次期安定版に導入される予定の機能をテストしたり、最新のOS機能を利用した開発を行ったりします。このコミットは、NetBSD-currentで導入された新しいシステムコールをGoから利用可能にするためのものです。
クォータ管理 (__QUOTACTL
)
ファイルシステムのクォータ管理は、ディスクスペースやinodeの使用量をユーザーやグループごとに制限する機能です。これにより、特定のユーザーやプログラムがディスクスペースを過剰に消費するのを防ぎ、ファイルシステムの安定性と公平性を保つことができます。quotactl
(または__quotactl
)システムコールは、このクォータシステムを制御するためのインターフェースを提供します。例えば、クォータの有効化/無効化、制限値の設定、使用状況の取得などが行えます。
プロセス生成 (POSIX_SPAWN
)
posix_spawn
は、新しいプロセスを生成するためのシステムコールです。従来のfork()
とexec()
の組み合わせに代わるもので、特にリソースが限られた環境や、セキュリティ要件が高い環境で効率的かつ安全にプロセスを生成するために設計されました。posix_spawn
は、新しいプロセスの属性(ファイルディスクリプタ、シグナルマスク、スケジューリングポリシーなど)を細かく制御しながら、単一のシステムコールでプロセス生成とプログラム実行を同時に行うことができます。これにより、fork()
が持つアドレス空間のコピーオーバーヘッドを回避し、パフォーマンスを向上させることが可能です。
効率的なネットワークI/O (RECVMMSG
, SENDMMSG
)
recvmmsg
とsendmmsg
は、複数のメッセージ(データグラム)を一度のシステムコールで送受信するためのシステムコールです。従来のrecvmsg
やsendmsg
が一度に1つのメッセージしか処理できないのに対し、これらのシステムコールは、複数のメッセージをバッチ処理することで、システムコール呼び出しのオーバーヘッドを削減し、ネットワークI/Oの効率を大幅に向上させます。これは、特に高スループットが要求されるネットワークアプリケーション(例: DNSサーバー、リアルタイム通信システム)において非常に有効です。
recvmmsg
: 複数のデータグラムを一度に受信します。sendmmsg
: 複数のデータグラムを一度に送信します。
技術的詳細
このコミットは、Go言語のsyscall
パッケージがNetBSDの特定のシステムコールを認識し、呼び出せるようにするための定数定義を追加しています。Goのsyscall
パッケージは、OSごとに異なるシステムコール番号や構造体を抽象化し、Goプログラムから統一的なインターフェースでOS機能にアクセスできるようにします。
具体的には、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
というファイルが変更されています。これらのファイルは、それぞれ32ビット(i386)と64ビット(amd64)アーキテクチャのNetBSDシステムにおけるシステムコール番号の定義を含んでいます。Goのビルドシステムは、ターゲットアーキテクチャとOSに基づいて適切なzsysnum_*.go
ファイルをコンパイル時に選択します。
追加されたシステムコールは以下の通りです。
SYS___QUOTACTL = 473
: ファイルシステムクォータを制御するためのシステムコール。Goプログラムからディスク使用量の制限や管理が可能になります。SYS_POSIX_SPAWN = 474
: 新しいプロセスを効率的に生成するためのシステムコール。fork
/exec
の代替として、より高速で制御性の高いプロセス起動を提供します。SYS_RECVMMSG = 475
: 複数のUDPデータグラムを一度に受信するためのシステムコール。ネットワークアプリケーションの受信スループットを向上させます。SYS_SENDMMSG = 476
: 複数のUDPデータグラムを一度に送信するためのシステムコール。ネットワークアプリケーションの送信スループットを向上させます。
これらの定数が追加されることで、Goのsyscall
パッケージは、これらのシステムコールに対応するGo関数を生成できるようになります。Go開発者は、これらの関数を呼び出すことで、NetBSDの最新の低レベル機能をGoプログラムから直接利用できるようになります。これは、Goで書かれたシステムツール、ネットワークサーバー、あるいはOSと密接に連携するアプリケーションの開発において、より高度な制御とパフォーマンス最適化を可能にします。
コアとなるコードの変更箇所
変更は、src/pkg/syscall/zsysnum_netbsd_386.go
とsrc/pkg/syscall/zsysnum_netbsd_amd64.go
の2つのファイルにわたります。両ファイルで、既存のシステムコール定数のリストの末尾に、新しい4つのシステムコール定数が追加されています。
--- a/src/pkg/syscall/zsysnum_netbsd_386.go
+++ b/src/pkg/syscall/zsysnum_netbsd_386.go
@@ -271,4 +271,8 @@ const (
SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }
SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }
SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }
+\tSYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }
+\tSYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); }
+\tSYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }
+\tSYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }
)
src/pkg/syscall/zsysnum_netbsd_amd64.go
も同様の変更が加えられています。
コアとなるコードの解説
上記のコードは、Go言語のsyscall
パッケージ内で使用されるシステムコール番号の定数を定義しています。Goのsyscall
パッケージは、各オペレーティングシステムとアーキテクチャの組み合わせに対して、対応するシステムコール番号をGoの定数としてマッピングしています。これにより、GoプログラムはOS固有のシステムコールを、Goの関数呼び出しとして透過的に利用できるようになります。
各行は、SYS_
プレフィックスを持つ定数名と、それに割り当てられた整数値(システムコール番号)、そしてコメントとしてC言語の関数プロトタイプを示しています。このC言語のプロトタイプは、そのシステムコールがどのような引数を取り、どのような値を返すかを示しており、Goのsyscall
パッケージが対応するGo関数を生成する際の参考になります。
const (
: Go言語で複数の定数をまとめて宣言するブロックの開始。SYS_SYMLINKAT = 470
: 既存のシステムコール定数。シンボリックリンクを作成するsymlinkat
システムコール。SYS_UNLINKAT = 471
: 既存のシステムコール定数。ファイルを削除するunlinkat
システムコール。SYS_FUTIMENS = 472
: 既存のシステムコール定数。ファイルのタイムスタンプを変更するfutimens
システムコール。SYS___QUOTACTL = 473
: 新しく追加されたシステムコール定数。ファイルシステムクォータを制御する__quotactl
システムコール。SYS_POSIX_SPAWN = 474
: 新しく追加されたシステムコール定数。新しいプロセスを生成するposix_spawn
システムコール。SYS_RECVMMSG = 475
: 新しく追加されたシステムコール定数。複数のメッセージを一度に受信するrecvmmsg
システムコール。SYS_SENDMMSG = 476
: 新しく追加されたシステムコール定数。複数のメッセージを一度に送信するsendmmsg
システムコール。)
: 定数宣言ブロックの終了。
これらの定数が追加されることで、Goのコンパイラは、Goプログラム内でsyscall.SYS___QUOTACTL
などの定数が参照された際に、対応するNetBSDのシステムコール番号に解決できるようになります。これにより、Goのsyscall
パッケージが提供する低レベルな関数(例: syscall.Syscall
, syscall.RawSyscall
)を通じて、これらの新しいシステムコールを呼び出すことが可能になります。
関連リンク
- Go言語の
syscall
パッケージのドキュメント: https://pkg.go.dev/syscall - NetBSD公式サイト: https://www.netbsd.org/
- POSIX
posix_spawn
に関する情報: https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawn.html - Linux man-pages project (recvmmsg): https://man7.org/linux/man-pages/man2/recvmmsg.2.html (NetBSDのmanページが見つからない場合、Linuxのmanページも参考になります)
- Linux man-pages project (sendmmsg): https://man7.org/linux/man-pages/man2/sendmmsg.2.html (NetBSDのmanページが見つからない場合、Linuxのmanページも参考になります)
参考にした情報源リンク
- Go言語のソースコード (GitHub): https://github.com/golang/go
- NetBSDの公式ドキュメントやメーリングリストアーカイブ (具体的なURLは検索結果による)
- 各種OSのシステムコールに関する技術文書やmanページ
- Stack Overflowや技術ブログなど、関連する技術情報が議論されているオンラインリソース
- Go CL 6454100: https://golang.org/cl/6454100 (コミットメッセージに記載されているGoのコードレビューシステムへのリンク)
- NetBSDのソースコード (特に
sys/syscall.h
や関連するファイル): https://cvsweb.netbsd.org/bsdweb.cgi/src/sys/ (NetBSDのシステムコール定義の確認に利用) - Wikipedia: システムコール, NetBSD, POSIX_SPAWN, recvmmsg, sendmmsg