今天看到select()函式,對socket_fd的操作,忽然生疑:socket描述符到底是什麼東西?這篇文章的解釋給了我答案:
socket函式
功能:指定協議型別
定義:
#include <
sys/types.h
>
#include <
sys/socket.h
>
int socket(int family, int type, int protocol);
返回值
出錯: -1
成功: 套介面描述字 (socket file descriptor)(套接字)sockfd
socket 函式指定了協議族(ipv4、ipv6或unix)和套介面型別(位元組流、資料報或原
始套介面)。但並沒有指定本地協議位址或遠端協議位址。
理解socket
socket使用 unix 檔案描述符 (file descriptor) 和其他程式通訊的方式。
unix 程式在執行任何形式的 i/o 的時候,程式是在讀或者寫乙個檔案描述符。
乙個檔案描述符只是乙個和開啟的檔案相關聯的整數。
這個檔案可能是乙個網路連線,fifo,管道,終端,磁碟上的檔案或者什麼其他
的東西。unix 中所有的東西是檔案!因此,與 internet 上別的程式通訊的時候,
套介面描述符 (socket descriptor),然後再通過他來呼叫 send() 和 recv()。
那麼為什麼不用一般的呼叫 read() 和 write() 來通過套介面通訊?
簡單的答案是:可以使用一般的函式!
詳細的答案是:使用 send() 和 recv() 讓你更好的控制資料傳輸。
**:
Socket中send函式的理解
int send socket s,const char buf,int len,int flags 引數描述 同步socket 的send函式的執行流程如下 如果len大於傳送緩衝區剩餘空間大小 不足放入剩餘傳送緩衝區 send就一直 等待協議把s傳送緩衝區中的資料傳送完 如果len小於傳送緩衝區...
對fork 函式的理解
標頭檔案 include cpp view plain copy pid t fork void 1.建立乙個子程序,失敗返回 1。2.呼叫一次,返回兩次。分別在父子程序中返回子程序的pid和0。利用返回值的不同,可以分別為父子程序編寫不同的處理分支。cpp view plain copy incl...
對Kernel函式的理解
問題 在低維空間線性不可分,需要對映到高維空間使其線性可分。方法 找到這個對映p x,y a,b,c eg p a x2 2 xyc y2 然而在分類器尋找的過程中我們通常需要計算內積 p1,p2 如果遇到上面的問題,樸素的想法是首先找到對映p,然後將p1,p2計算出來,然後計算 p1,p2 但這樣...