0

ユーザー空間からカーネル空間に構造体のリスト/配列を送信しようとしています。Linkに似て いる そこで推奨されているように、私が見つけたlinkのソケットを使用することを考えています。この行にメッセージが設定されています

strcpy(NLMSG_DATA(nlh), "Hello");

私は試した

NLMSG_DATA(nlh) = my_list

それは私にエラーを与えました:代入の左オペランドとして左辺値が必要です。

ネットリンクを使用して配列/リストを送信するようにこれを変更するにはどうすればよいですか? この方法で送信できない場合、他にどのように簡単に送信できますか?

アップデート

私の構造

typedef struct {
 int val1;
 int val2;
} mystruct;

他のシステムコールがそのリストにアクセスできるように、これらの配列/リストをカーネルメモリに割り当てる必要があります。

4

2 に答える 2

0

NLMSG_DATA()はポインターの右辺値に評価されるため、 のようなコピー関数を使用する必要がありますmemcpy(NLMSG_DATA(nlh), my_list, sizeof my_list)

正確な詳細は、データ構造によって異なります。おそらく、リスト エントリの数を送信してから、各エントリを個別に送信する必要があります。

于 2010-12-14T03:30:29.160 に答える
0

netlink ソケットを使用してポインターベースの構造体を送信することはできません。netlink のパケット構造を参照してください。すべてのデータは単一のブロック内にある必要があります。

于 2010-12-14T03:35:27.197 に答える