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)
归档时间: |
|
查看次数: |
2531 次 |
最近记录: |