第九章 守護程序與socket程式設計(重點)

2022-05-06 16:51:12 字數 1908 閱讀 7134

(一) 守護程序

守護程序(daemon)是指那些隨著系統啟動,一直執行於系統整個生命週期的系統程式,它們一般不受使用者登入登出影響。 它獨立於控制終端並且周期性地執行某種任務或等待。

會話(session)是乙個多個程序組的集合,每個程序都有乙個父程序並且屬於乙個程序組,每個程序組都有乙個程序組號,該號等於該程序組組長的pid號,乙個程序只能為它自己或子程序設定程序組id號。

每個程序都屬於乙個程序組,而程序組又屬於某個會話。當使用者從終端登入系統(不管是終端還是偽終端),系統會建立乙個新的會話。在該終端上啟動的程序都會被系統劃歸到會話的程序組中。 會話中的程序通過該會話中的領頭程序(常稱其為控制程序)與乙個終端相連。該終端是會話的控制終端。乙個會話只能有乙個控制終端,反之一樣。如果會話存在乙個控制終端,則它必然擁有乙個前台程序組。屬於該組的程序可以從控制終端獲得輸入。這時,其他的程序組都為後台程序組。

建立守護程序步驟:

1>  脫離父程序  fork 建立子程序且退出父程序。這樣,子程序將變成孤兒程序,並被init程序接管,同時,所產生的新程序將變為在後台執行。

2> 呼叫setsid函式 使得新建立的程序脫離控制終端,同時建立新的程序組,並成為該程序組的首程序。

由於守護程序沒有控制終端,而使用fork函式建立的子程序繼承了父程序的控制終端、會話和程序組,因此,必須建立新的會話,以脫離父程序的影響。

setsid函式將建立新的會話,並使得呼叫setsid函式的程序成為新會話的領頭程序。呼叫setsid函式的程序是新建立會話中的惟一的程序組,程序組id為呼叫程序的程序號。setsid函式產生這一結果還有個條件,即呼叫程序不為乙個程序的領頭程序。由於在第一步中呼叫fork的父程序退出,使得子程序不可能是程序組的領頭程序。該會話的領頭程序沒有控制終端與其相連。至此,滿足了守護程序沒有控制終端的要求 

3>更改當前工作目錄 ,守護程序一般會將其工作目錄更改到根目錄.

4>關閉檔案描述符.

5>設定守護程序的檔案許可權建立掩碼 .

6> 功能實現

(2)socket

socket 套介面,是網路通訊的載體。(相當於你告訴它目的位址,它就會把資料運送的目的位址)。

socket建立: 

int socket(int domain, int type, int protocol);

socket配置:int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

監聽連線:  int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

連線建立:

int connect(int sockfd, struct sockaddr *serv_addr,int addrlen);

資料傳輸:

1> tcp :  int send(int sockfd, const void *msg, int len, int flags);

int recv(int sockfd,void *buf,int len,unsigned int flags);

2> udp :  int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

結束傳輸:  int shutdown(int sockfd,int how);

(3) 感言

由於linux 開發大多用於服務開發模型,不會面向桌面(當然 除了嵌入式),而服務開發有離不開網路。所以將二者結合起來講解。本章事例程式參見 【工程庫】/【跨平台服務開發模板】

。 

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...

第九章 引用

引用擁有指標的所有功能,只是語法更加的簡單 1 引用就是別名,變數的另外乙個名字,變數和別名它們的位址是一樣的,操作別名就是操作變數 2 引用就是別名常量,一旦引用被初始化就不能再改變了 可以理解為指標常量,指向的值不能改變,能改變的只是它的該位址處的值 3 引用物件huamn mike human...