獲得網路名字和網路編號:讀的資料庫檔案是/etc/networks
#include
struct netent * getnetent(void);
網路號按網路位元組序返回。位址型別為 af_xx 的位址族常量。
結構體:
struct netent;
返回值:
功能:從資料庫檔案讀與網路名匹配乙個結構體,並返回。
網路號按網路位元組序返回。位址型別為 af_xx 的位址族常量。
返回值:
#include
void setservnet(int stayopen);
void endservnet(void);
+ 功能:
+ `setservnet`開啟與資料庫的連線,並且設定下乙個入口為第乙個入口。如果`stayopen`是非0的話,在呼叫`getnet*`函式之前,與資料庫的連線不會關閉。
+ `endservnet`關閉與資料庫的連線。
將主機名(ip位址)和服務名(埠)對映到乙個struct sockaddr
位址結構
#include
#include
#include
int getaddrinfo(const
char *node, const
char *service,const
struct addrinfo *hints, struct addrinfo **res);
addrinfo
結構體:鍊錶結構
struct addrinfo;
引數:hints
:用來篩選符合特定條件的位址,hints是乙個用來過濾的模板,除了ai_family, ai_flags, ai_protocol, ai_socktype
可以設定之外其他的都設定為0或者空指標。
返回值:
freeaddrinfo
:釋放addrinfo
結構;
gai_strerror
:將getaddrinfo
的錯誤碼轉換成為錯誤訊息。
#include
#include
int getnameinfo(const
struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char* serv, size_t servlen, int flags);
引數:返回值:
#include
int bind(int sockfd, const
struct sockaddr *addr, socklen_t len);
引數:
len
:位址長度
返回值:
對於網際網路域,如果指定ip位址為 inaddr_any() ,套接字端點可以被繫結到所有的系統網路介面,這樣它可以收到這個系統的所有網絡卡的資料報。
#include
int getsockname(int socket, struct socksddr *restrict address, socklen_t *restrict address_len);
引數:返回值:
引數:返回值:
建立連線:主要針對面向連線的傳輸協議,如(sock_stream和sock_seqpacket
)
如果套接字不是面向連線的,connect
會設定對方的位址為address
,僅能接收該位址的報文,並且不建立連線。
返回值:
功能:用來標記面向連線的套接字,表示套接字可以接受backlog
個連線請求;
引數:返回值:
引數:
address
:輸出
address_len
:
返回值:
資料傳輸:
#include
ssize_t send(int socket, const
char *buffer, size_t length, int flags);
引數:
返回值:
功能:接受資料存在緩衝區。
引數:返回值:
功能:與send
一樣除了一下幾點:
sendto
的引數裡面有位址和位址長度,因此當套接字是不是面向連線的時候,將直接向位址傳送資料報,這個位址必須由connect
設定過。
如果套接字協議支援廣播,而且位址是乙個廣播位址,套接字也設定了o_broadcast
則可以向廣播位址廣播。
#include
ssize_t recvfrom(int socket, const
void *message, size_t length, int flags, const
struct sockaddr *dest_addr, socklen_t dest_len);
和send
對應,flags
和recv
一樣。
#include
ssize_t sendmsg(int socket, const
struct msghdr *message, int flags);
ssize_t recvmsg(int socket, const
struct msghdr *message, int flags);
引數:獲取主機名字:
#include
int gethostname(char *name, size_t namelen);
int sethostname(const
char *name, size_t len);
unix 環境高階程式設計 讀書筆記
unix環境高階程式設計 讀書筆記 第8章exit和 exit區別 exit會直接進入核心,不會關閉io流。程序基本控制函式還有 wait,fork,exec。atexit 程式正常退出時呼叫,如果因為signal退出則不能呼叫。功能 註冊函式可以完成一些清理工作,比如全域性log類,可以不設定析構...
unix環境高階程式設計 讀書筆記
檔案 unix支援在不同程序之間共享開啟的檔案。核心使用三種資料結構表示開啟的檔案 原子操作 一般而言,原子操作指的是由多步組成的操作。如果該操作原子的執行,要麼執行完所有步,要麼一步也不執行,不可能只執行所有步驟的乙個子集。2 注意 原子操作函式 pread,pwrite pread 相當於呼叫r...
讀書筆記之UNIX環境高階程式設計 11
執行緒 1.像每個程序有乙個程序id一樣,每個執行緒也有乙個執行緒id。程序id在整個系統中是唯一的,程序id相同,但執行緒id不同,執行緒id只在它所屬的程序環境有效 2.每個程序只有乙個控制線程即main執行緒 3.執行緒建立時並不能保證哪個執行緒會先執行 是新建立的執行緒還是呼叫執行緒 4.主...