(一) 守護程序
守護程序(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...