1、設定埠
2、程序執行目錄
3、start()
利用epoll多路i/o復用
一般而言,由硬體產生的訊號需要 cpu 立馬做出回應,不然資料可能就丟失了,所以它的優先順序很高。
cpu 理應中斷掉正在執行的程式,去做出響應;當 cpu 完成對硬體的響應後,再重新執行使用者程式。
它和函式呼叫差不多,只不過函式呼叫是事先定好位置,而中斷的位置由「訊號」決定。
中斷程式呼叫
以鍵盤為例,當使用者按下鍵盤某個按鍵時,鍵盤會給 cpu 的中斷引腳發出乙個高電平,cpu 能夠捕獲這個訊號,然後執行鍵盤中斷程式。
程序阻塞為什麼不占用 cpu 資源?
跑題了:
通過乙個輪詢處理i/o事件
void
*epoll_run
(int port)
// 建立lfd,並新增至監聽樹
int lfd =
init_listen_fd
(port, epfd)
;while(1
)for
(i=0
; i++i)
if(pev->data.fd == lfd)
else}}
}
void
do_read
(int cfd,
int epfd)
;int ret, n;
ret =
get_line
(cfd, line,
sizeof
(line));
if(ret ==0)
else
; n =
get_line
(cfd, buf,
sizeof
(buf));
if(n ==-1
)break;if
(buf[0]
=='\n'
)break;}
}// 判斷http協議頭,拆分 方法、檔名、協議號 -- "get /hello.c http/1.1"if(
strncasecmp
("get"
, line,3)
==0), path[
256]
=, protocol[16]
=;sscanf
(line,
"%[^ ] %[^ ] %[^ ]"
, method, path, protocol)
;// 處理 瀏覽器請求檔案
// 判斷檔案型別 --- 普通檔案。
if (s_isreg(sbuf.st_mode))
}
回發
// printf("寫回的http應答:|\n%s|\n", buf);
// 將組織好的 http 應答頭,傳送給瀏覽器
int ret =
send
(cfd, buf,
strlen
(buf),0
);if(ret ==-1
)}傳送檔案內容
void
send_file
(int cfd,
const
char
*file)
;int fd =
open
(file, o_rdonly);if
(fd ==-1
)// 迴圈從,本地檔案讀取資料,寫入套接字給瀏覽器
while
((n =
read
(fd, buf,
sizeof
(buf)))
>0)
close
(fd)
;}
void
do_accept
(int lfd,
int epfd)
// 列印客戶端ip+port
char client_ip[64]
=;printf
("new client ip: %s, port: %d, cfd = %d\n"
,inet_ntop
(af_inet,
&clt_addr.sin_addr.s_addr, client_ip,
sizeof
(client_ip)),
ntohs
(clt_addr.sin_port)
, cfd)
;// 設定 cfd 非阻塞
int flag =
fcntl
(cfd, f_getfl)
; flag |
= o_nonblock;
fcntl
(cfd, f_setfl, flag)
;// 將新節點cfd 掛到 epoll 監聽樹上
struct epoll_event ev;
ev.data.fd = cfd;
// 邊沿非阻塞模式
ev.events = epollin | epollet;
int ret =
epoll_ctl
(epfd, epoll_ctl_add, cfd,
&ev);if
(ret ==-1
)}
網頁樣式 DIV CSS初步
行內樣式 不推薦使用 內部樣式 寫在之間 外部樣式 連線式 先載入樣式表,收載入頁面 匯入式 一 基本選擇器 標籤選擇器 類選擇器 類名 id選擇器 id 二 符合選擇器 並集選擇器 用,隔開 交集選擇器 什麼都不用 後代選擇器 用空格隔開 一 劃分的大的區域一般用id選擇器 header main...
小型伺服器
在cmd或者shell中啟動python自帶的http伺服器 python m httpserver 80 指定80埠正常啟動會看到如下輸出 serving http on 0.0.0.0 port 8000 說明http伺服器啟動成功,預設埠是8000 在瀏覽器輸入,http 可以省略 或者 ht...
搭建小型郵件伺服器
公司用的exchange郵件伺服器,最近公升級內外網郵件分離。在使用outlook鏈結exchange server的時候,只能收到公司內部之間的郵件。而jira的伺服器配置的傳送郵箱的伺服器是外網的。於是申請了公司內部郵箱賬號來傳送jira郵件,無奈公司的exchange server要求使用nt...