第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在linux ping命令中的struct proto的問題,求解釋~

請問在linux ping命令中的struct proto的問題,求解釋~

藍山帝景 2021-12-31 11:07:12
ping命令里定義的struct proto:struct proto {void (*fproc)(char *, ssize_t, struct timeval *);void (*fsend)(void);struct sockaddr *sasend; /* sockaddr{} for send, from getaddrinfo */struct sockaddr *sarecv; /* sockaddr{} for receiving */socklen_t salen; /* length of sockaddr{}s */int icmpproto; /* IPPROTO_xxx value for ICMP */} *pr;有:struct proto proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };其中的proc_v4,send_v4都是函數,pro定義如下:void proc_v4(char *ptr, ssize_t len, struct timeval *tvrecv);void send_v4(void);具體函數內部定義就不貼了,沒什么關系。我的問題是:在proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP }中,proc_v4函數怎么傳參?整個ping源碼里面沒有其他地方調用到proc_v4了,只有在proto_v4里調用了,他傳進去的是函數的是函數地址還是函數返回值的地址?而且struct proto_v4怎么可以直接用‘=‘呢?求高手幫忙解答,謝謝!那還有proc_v4這個函數需要參數,怎么把參數傳進去呢?
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

可以使用,相當與函數地址作為一個常量值賦值給結構體變量函數
proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };
等同于:
proto_v4 = { &proc_v4, &send_v4, NULL, NULL, 0, IPPROTO_ICMP }
即取函數地址指針。

查看完整回答
反對 回復 2022-01-04
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

fproc是函數指針,指向函數的入口地址。
標準寫法是proto_v4.fproc = &proc_v4;
可以簡寫為proto_v4.fproc = proc_v4;
編譯器都認識。

用函數指針通??梢苑庋b某些內部信息,參數可以通過消息傳遞。

可能的一種調用形式為:
void process(struct proto *p,u32 msg[4])
{
char *s = (char*)msg[0];
ssize_t *sz = (ssize_t*)msg[1];
struct timeval *tv = (struct timeval*)msg[2];
p->fproc(s,*sz,tv);
}

結構體初始化用=有什么問題嗎?



查看完整回答
反對 回復 2022-01-04
  • 2 回答
  • 0 關注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號