Víc*_*dez 1 c c++ sockets struct offsetof
我正在尝试在C++(Linux)中为我的一个套接字添加套接字过滤器.在套接字过滤器中,我需要获取struct fork_proc_event的偏移量,它嵌套在另一个结构中.定义看起来像这样(cn_proc.h):
struct proc_event {
...
union {
...
struct fork_proc_event {
__kernel_pid_t parent_pid;
...
} fork;
...
} event_data;
...
};
在CI中会这样做:
int off = offsetof(struct fork_proc_event, parent_pid);
但是我正在用C++开发.如果我尝试这样做:
int off = offsetof(proc_event::fork_proc_event, parent_pid);
我收到以下错误:
error: expected type-specifier error: expected `,' error: expected `)' before ',' token
offsetof()行应该如何?
考虑如何实现offsetof宏可能有助于思考.这是一个例子:
#define offsetof(TYPE, MEMBER) \
((uintptr_t)&(((TYPE*)0)->MEMBER))
Run Code Online (Sandbox Code Playgroud)
换句话说,使用0指向您感兴趣的类型的指针,并简单地获取struct字段的地址...
所以,如果你想要parent_pid相对的偏移量fork(这是我最初解析你的问题的方式):
((char*)&((struct proc_event*)0)->event_data.fork.parent_pid) - ((char*)&((struct proc_event*)0)->event_data.fork)
Run Code Online (Sandbox Code Playgroud)
在第二次阅读时,听起来你可能只想要parent_pid相对于开头的偏移量struct proc_event.调整上面的例子:
((uintptr_t)&((struct proc_event*)0)->event_data.fork.parent_pid)
Run Code Online (Sandbox Code Playgroud)