原创 進程或線程持有鎖期間終止了,怎麼辦?

1,進程終止:         進程終止時系統不會自動釋放所持有的互斥鎖、讀寫鎖和Posix信號量,進程終止時內核總是自動清理的唯一同步鎖類型是fcntl記錄鎖。System V信號量,應用程序可以選擇進程終止時內核是否自動清理某個信號量

原创 udp客戶端使用bind的場景

無連接的socket的客戶端和服務端以及面向連接socket的服務端通過調用bind函數來配置本地信息。使用bind函數時,通過將my_addr.sin_port置爲0,函數會自動爲你選擇一個未佔用的端口來使用。   Bind()函數在成

原创 udp端口不可達 icmp

1,報文格式 報文如下,10.30.13.1往10.30.16.10的80端口發送了一個UDP報文,80端口其實監聽的是TCP。 服務器回覆了一個類型爲端口不可達的ICMP,ICMP數據部分就是請求UDP ip層及其以上的數據。 2,產

原创 TCP 和 UDP 套接字緩衝區

1、MTU(Maximum Transmission Unit) 最大傳輸單元,在數據鏈路層中,往往規定了MTU大小,IP層的數據包通過數據鏈路層如果大於MTU,將被分片,到達接收端IP層後再被重組。以太網的MTU爲1500字節。 2、M

原创 socket的sigpipe信號

對一個對端已經關閉的socket調用兩次write,第一次將會收到隊端的RST響應, 第二次將會生成SIGPIPE信號, 該信號默認結束進程. 具體的分析可以結合TCP的"四次握手"關閉. TCP是全雙工的信道, 可以看作兩條單工信道,

原创 socket可讀和可寫的條件

一、 下列四個條件中的任何一個滿足時,socket準備好讀:   1,socket接收緩衝區中已經接收的數據的字節數大於等於socket接收緩衝區低潮限度的當前值;對這樣的socket的讀操作不會阻塞,並返回一個大於0的值(即:準備好讀

原创 SO_ERROR 套接字選項

當一個套接字上發生錯誤時,內核協議中的協議模塊將此套接字的名爲so_error的變量設爲標準的Unix Exxx值中的一個,我們稱它爲該套接字的待處理錯誤(pending error)。 內核能夠以下面兩種方式之一立即通知進程這個錯誤。

原创 三次握手的第三個ACK包丟了,會發生什麼?

衆所周知,TCP建立採用的是三次握手。最近在看論文的時候,突然想到,如果第三個ACK報文丟失了,TCP建立是否還會成功?TCP是如何處理的呢? 三次握手的第三個ACK包丟了——客戶端認爲連接建立,寫數據時,會觸發RST  。 當Clie

原创 網絡編程 accept

1,accept         從listen 監聽隊列中接受一個連接。 #include <sys/types.h> #include <sys/socket.h> int accept(int socked, struct so

原创 二分查找

一,二分查找 二分查找法作爲一種常見的查找方法,將原本是線性時間提升到了對數時間範圍,大大縮短了搜索時間,但它有一個前提,就是必須在有序數據中進行查找。 時間複雜度:O(lon2(n)) 二,最基本的二分查找 int binarySe

原创 80. 刪除排序數組中的重複項 II

一,刪除排序數組中的重複項 II 給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 示例 1:

原创 26. 刪除排序數組中的重複項

一,刪除排序數組中的重複項 給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定數

原创 27. 移除元素

一,移除元素 給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。 元素的順序可以改變。

原创 283. 移動零

一,移動零 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 示例: 輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 說明: 必須在原數組上操作,不能拷貝額外的數組。 儘量

原创 linux內核源碼下載地址

從linux0.0.1到現在,可下載不同時期的linux 內核版本: http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/