原创 進程或線程持有鎖期間終止了,怎麼辦?
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/