這兩天總結寫了乙個linuxc下面的多程序socket通訊的互動程式,收穫良多。特別是對fork程序複製函式有了進一步的了解。同時對socket的處理有了更好掌握:
伺服器端
socket 初始化
bind 與位址的繫結 用到 sockaddr_in
listen 監聽
建立乙個死迴圈
accept 接收乙個請求
fork 複製乙個程序
子程序 返回值0
再次 fork 建立子程序的子程序
返回非零是父程序 推出 exit
孫子程序處理任務(因為其主程序以及死亡,所以其程序有init接管)
主程序waitpid 主程序的子程序很快結束退出,而接管他的子孫程序已經脫離主程序非init程序託管
最後處理善後的接管釋放等動作
客服端比較簡單
直接socket 初始化
sockaddr_in 初始化
connect 連線實現繫結
write 請求
read 請求
有乙個問題在socket通訊的過程中read 和 write 最好指定讀取的資料實際長度,否則可能會出現異常:
1、太短 資料沒讀取全
2、太長 會使得一直在請求 知道timeout在斷開
還有個問題就是write 和 read 並不一定會真實的返回你指定的寫或者讀的資料長度,需要迴圈去處理他。
完畢,下午又要搞php一會兒,無聊……
C語言之random n 續
之前寫拉乙個random n的演算法實現,雖然簡單易懂,但是演算法的效率相對來說不算很高,節省拉空間,只用到拉乙個陣列實現。這個random n的實現用到拉兩個陣列,子函式中的陣列在函式棧銷毀時釋放空間。最好和最壞執行時間都是o n 主要時利用拉空間換時間。具體的 實現如下 include incl...
指向函式的指標(續) C語言
內容 前面寫過 指向函式的指標 c語言 本文將在陣列指標的基礎上對函式的指標 我們先來做個關於陣列的小實驗 include int main void printf a d n a printf a d n a printf a 1 d n a 1 printf a 1 d n a 1 printf...
c語言 巨集中 的用法(續)
如下 不明覺厲。define ext2 debug f,a.特別是其中printf f,a 這樣的用法。google之後在stackoverflow找到了這個問題以及解答。詳細的解答跳轉到了gnu的gcc文件 譯文如下 3.6 variadic macros 可變引數的巨集 乙個巨集可以像乙個函式一...