原创 Linux--線程死鎖

線程爲什會死鎖??“鎖”又是什麼東西?我們這篇博客主要講一下爲什麼要給線程加鎖,爲什麼會出現線程死鎖,線程死鎖怎麼解決。 互斥鎖 在我的上篇博客已經講解了一些線程的基本知識Linux–線程控制我們可以瞭解到線程是共享同一份內存的。

原创 I/O多路轉接之select服務器

五種I/O模型 Unix共有五種I/O模型: 阻塞式I/O 非阻塞I/O I/O複用(select和(e)poll) 信號驅動I/O(SIGIO) 異步I/O(Posix.1的aio_系列函數) 阻塞I/O模型 應用程序調用一

原创 面試題:合併兩個有序鏈表

題目:合併兩個有序鏈表,合併以後的鏈表依舊有序。 思路 我們合併一個有序的鏈表,首先我們要找出兩個鏈表中頭結點小的那個。鏈表1的頭結點的值小於鏈表2的頭結點的值,因此鏈表1的頭結點將是合併後鏈表的頭結點。 在剩餘的鏈表中

原创 TCP報文段首部分析詳解

TCP協議 傳輸控制協議TCP(Transmission Control Protocol) 是運輸層的主要協議,運輸層另一個重要的協議是用戶數據報協議UDP(User Datagram Protocol),這兩個控制協議在協議棧

原创 Linux--守護進程

守護進程也稱爲精靈進程(Daemon),是運行在後臺的一種特殊進程。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護進程是一種很有用的進程。Linuxd的大多數服務器就是用守護進程實現的。比如:Interne

原创 子進程的異步等待方式

基礎知識 在前面的博客中我們已經介紹了殭屍進程(殭屍進程與孤兒進程)的相關知識,我們說過可以通過調用wait和waitpid函數清理殭屍進程,父進程可以阻塞等待子進程結束,也可以以非阻塞的查詢是否有子進程結束等待清理(也就是輪詢的

原创 計算機網絡:TCP套接字通信

預備知識 套接字 套接字(socket)這個詞可以表示很多概念:在TCP/IP協議中,”IP+地址+TCP/UDP端口號”唯一標示網絡通訊中的一個進程,IP地址+端口號”就稱爲socket。 網絡字節序 網絡中要實現通信,少不了數

原创 C語言複習

C語言複習 變量與零值比較 布爾變量與零值比較 1.不可將布爾變量直接與TRUE,FALSE或者1,0進行比較。 下面代碼都是不良風格 if(flag == true) if(flag == 1) if(flag == false

原创 CRC校驗算法

基本概念 CRC即循環冗餘校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項

原创 TCP的三次握手和四次揮手詳解

我們在上一篇博客中介紹了TCP服務和分析TCP的首部,而今天講的三次握手與四次揮手也會用到TCP的首部,不太清楚的小夥伴可以閱讀一下:TCP報文段首部分析 TCP的三次握手 TCP以全雙工方式傳送數據。在任何數據傳送之前,要使每一

原创 Linux--crond和crontab學習

Linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是默認啓動的。另 外, 由於使用者自己也可以設置計劃任務,所以, Linux 系統也提供了使用

原创 Linux--線程安全與可重入函數的區別和聯繫

可重入函數 概念 函數被不同的控制流程調用,有可能在第一次還沒返回時就再次進入該函數,這稱爲重入。 當程序運行到某一個函數的時候,可能因爲硬件中斷或者異常而使得在用戶正在執行的代碼暫時終端轉而進入你內核,這個時候如有一個信號需要

原创 Linux--生產者與消費者

基本概念 提到生產者和消費者,我們最有可能想到的是商店賣東西,顧客在貨架上(緩衝區)買東西。 生產者消費者問題,其實是一個多線程同步問題的經典案例。該問題描述了兩個共享固定大小緩衝區的線程—即所謂的“生產者”和“消費者”–在實際

原创 面試題:螺旋隊列

下面是一個螺旋隊列: 問題: 看清以上數字排列的規律,設1點的座標是(0,0),x方向向右爲正,y方向向下爲正。例如:7的座標爲(-1,-1),2的座標爲(0,1),3的座標爲(1,1)。編程實現輸入任意一點座標(x,y),輸

原创 計算機網絡:UDP套接字通信

上篇博客我們講了,TCP套接字通信這篇博客我們主要講解一下UDP套接字通信。 基本概念 用戶數據報協議UDP(User Datagram Protocol)在傳送數據之前不要要先建立連接,遠地主機的運輸層在收到UDP報文後,不需要