![](/img/trans.png)
[英]How to read all of STDOUT produced by system() call into a socket written in C?
[英]Socket's system call Bind In c
我在一次采訪中被問到為什么需要計算綁定系統調用中綁定的地址的大小。
bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr))
意味着我想知道在綁定系統調用中使用第三個參數的目的是什么?
因為sockaddr
結構或多或少地充當“派生”結構(如sockaddr_in
)的“基礎”結構。 這幾乎是一個 inheritance 機制。
sockaddr
包含可變長度數據,可以由“派生”結構(如sockaddr_*
)使用,因此您需要精確“派生”結構的有效大小。
C 調用通常需要作為參數傳遞給它們的數據的大小,這就是結構所做的一切,否則,當從結構中讀取數據時,內部 function 可能會嘗試讀取結構的邊界,我們都知道那很糟糕。
這是一張支票。 類型信息不會傳遞給 function,因此它使用大小來驗證結構可能是正確的類型,或者至少足夠大以至於不會寫入越界 memory。
這也是一種面向未來的形式:如果結構的更高版本具有更多字段並強制結構增長,接收調用可以區分新舊,並且只填寫可能的數據量而無需擔心寫越界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.