NetLink 自体は、データが文字列、整数、構造体などであるかどうかを気にしません。単に void* と長さを取り、それを見ずにデータをコピーします。構造体を void* にキャストし、sizeof を使用して長さを決定し、そのデータを netlink 経由で送信できます。
もう一方の端では、void* と長さを取得し、長さが想定どおりであることを確認し、void* を構造体へのポインターにキャストするだけです。確認する重要な点は次の 2 つです。
UserSpace と KernelSpace の両方のコードで、構造体のメモリ レイアウトが一致しています。これは、同じ .h に対して両方をコンパイルし、メモリ レイアウトとアラインメントが同じになるようにコンパイル オプションを設定することを意味します。
構造体は単なる生のメモリ コピーとして転送されます。ポインターを修正するためのインテリジェンスがないため、構造体にポインターを含めることはできません。
もう1つのオプションは、生データを送信するのではなく、データを既知の形式の文字列から変換して自分で「シリアル化」することです。これにより、余分な CPU とメモリのオーバーヘッドを犠牲にして、より複雑なデータ構造を処理できるようになります。