文章目錄
7. Linux服務器程序規範
7.1. UID、EUID
一個進程擁有兩個用戶ID:UID、EUID
- 做任何一個操作時,最終看它有沒有權限,是在判斷有效用戶ID是否有權限
- 比如su程序,要訪問 /etc/passwd,而訪問該文件需要root權限。將su程序設置set-user-id標誌,普通用戶啓動的su程序就能依據EUID來執行。
7.2. 進程間關係
7.3 查看、修改資源限制
- ulimit
修改當前shell環境下的資源限制(軟限制、硬限制),對該shell啓動對所有後續程序有效- 修改配置文件
7.4 獲取、改變工作目錄
char* getcwd(char* buf, size_t size);
int chdir(const char* path);
7.5 設置後臺進程
int daemon(int nochdir, int noclose);
nochdir:
==0,工作目錄切換爲 /
!=0,繼續使用當前工作目錄
noclose:
==0,標準輸入、標準輸出、標準錯誤重定向到/dev/null
!=0,依然使用原來對設備
8. 高性能服務器程序框架
8.1 C/S模型
8.2 I/O模型
阻塞IO:阻塞的文件描述符
非阻塞IO:非阻塞的文件描述符
- 可能被阻塞的系統調用:accept、send、recv、connect
對於非阻塞的I/O系統調用總是立即返回,如果事件沒有立即發生,返回-1,根據errno來區分是否出錯。
- accept、send、recv:errno設置成EAGAIN或EWOULDBLOCK
- connect:errno設置成EINPROGRESS
只有在事件已經發生的情況下操作非阻塞I/O,才能提高程序的效率。
非阻塞I/O通常要和其它I/O通知機制一起使用
- I/O複用:能提高程序效率的原因在於具有同時監聽多個I/O事件的能力
- SIGIO信號
8.3 池
內存池:socket的接受緩存、發送緩存
進程池、線程池
連接池:連接數據庫的長久連接