当前位置: 技术问答>linux和unix
读linux源码时遇到的问题?(可能很菜,但请不吝指教!)
来源: 互联网 发布时间:2015-02-14
本文导语: 在读linux源码时经常有结构型变量,如下: 但我有如下问题: 1.为什么不是typedef struct sock{}**结构? 2.在结构里经常回遇到指向函数的指针,但函数的原型我找不到,why? 初读源码,问题多多,但确实感到很有收获...
在读linux源码时经常有结构型变量,如下:
但我有如下问题:
1.为什么不是typedef struct sock{}**结构?
2.在结构里经常回遇到指向函数的指针,但函数的原型我找不到,why?
初读源码,问题多多,但确实感到很有收获,请各位指教。
struct sock {
/* Socket demultiplex comparisons on incoming packets. */
__u32 daddr;
__u32 rcv_saddr;
__u16 dport; struct sock *next;
struct sock **pprev;
struct sock *bind_next;
struct sock **bind_pprev;
/* Callbacks */
void (*state_change)(struct sock *sk);
void (*data_ready)(struct sock *sk,int bytes);
void (*write_space)(struct sock *sk);
void (*error_report)(struct sock *sk);
int (*backlog_rcv) (struct sock *sk,
struct sk_buff *skb);
void (*destruct)(struct sock *sk);
};
但我有如下问题:
1.为什么不是typedef struct sock{}**结构?
2.在结构里经常回遇到指向函数的指针,但函数的原型我找不到,why?
初读源码,问题多多,但确实感到很有收获,请各位指教。
struct sock {
/* Socket demultiplex comparisons on incoming packets. */
__u32 daddr;
__u32 rcv_saddr;
__u16 dport; struct sock *next;
struct sock **pprev;
struct sock *bind_next;
struct sock **bind_pprev;
/* Callbacks */
void (*state_change)(struct sock *sk);
void (*data_ready)(struct sock *sk,int bytes);
void (*write_space)(struct sock *sk);
void (*error_report)(struct sock *sk);
int (*backlog_rcv) (struct sock *sk,
struct sk_buff *skb);
void (*destruct)(struct sock *sk);
};
|
1.为什么不是typedef struct sock{}**结构?
为什么要定义为typedef struct sock{}; 呢?
怎么定义都是可以的
2.在结构里经常回遇到指向函数的指针,但函数的原型我找不到,why?
void (*state_change)(struct sock *sk);
这些只是定义了一些函数指针,可以赋值给这些指针的函数可以定义在别的文件中
为什么要定义为typedef struct sock{}; 呢?
怎么定义都是可以的
2.在结构里经常回遇到指向函数的指针,但函数的原型我找不到,why?
void (*state_change)(struct sock *sk);
这些只是定义了一些函数指针,可以赋值给这些指针的函数可以定义在别的文件中