我正在研究Linux(非特權)上的C程序。在Linux上的C程序中從套接字描述符獲取struct socket *,struct sock *
是否可以從套接字描述符中獲得對struct socket
或struct sock
的引用?
謝謝。
我正在研究Linux(非特權)上的C程序。在Linux上的C程序中從套接字描述符獲取struct socket *,struct sock *
是否可以從套接字描述符中獲得對struct socket
或struct sock
的引用?
謝謝。
如果您在用戶模式下工作(例如非內核模式),則不能直接操作內核結構(包括struct sock
)。如果您確實需要訪問這些內核結構,則需要編寫以內核模式運行的代碼(可能在內核模塊中)。
看看sockfd_lookup_light函數(http://lxr.free-electrons.com/source/net/socket.c#L449),這就是系統如何做到這一點。
我覺得應該是'sockfd_lookup'。 'sockfd_lookup_light'被標記爲靜態,因此不能從文件外部調用 – dlmeetei
謝謝大家,我確實到了那裏但沒有成功。問題是'/ usr/include/linux/net.h'中沒有sockfd_lookup(),但它存在於'/ usr/src/linux-headers-VERSION/include/linux/net.h'中。 –
我可以使用'gcc'使用這些頭文件進行編譯,並且生成的二進制文件將以非特權模式運行嗎? –