原创 linux 動態庫的製作和使用

step1.首先生成與位置無關的代碼 (生成與位置無關的.o) gcc -fPIC -c *.c -I ../include/ step2.生成動態庫 gcc -shared -o libMycalc.so *.o -I .

原创 linux 對父子進程共享文件描述符的理解

重新回顧一下什麼是文件描述符:文件描述符是由無符號整數表示的句柄,進程使用它來標識打開的文件。文件描述符與包括相關信息(如文件的打開模式、文件的位置類型、文件的初始類型等)的文件對象相關聯,這些信息被稱作文件的上下文。 父子進程共

原创 筆試題0622

題目:給一個斐波那契數列0,1,1,2,3,5,8,13,21,34…然後給一個整數n,求數列中前n個數含有多少個1. 這題太簡單了。 招銀網絡的測試崗位竟然還考數據庫大題,措手不及,忘記複習了。。。 #include <iost

原创 linux 靜態庫的製作和使用

製作流程: 首先建立三個目錄:include,lib,src src用來存放所有的.c文件 include用來存放所有的頭文件 lib用來存放靜態庫 step1:在src目錄下對*.c 進行處理,得到*.o gcc *.c -

原创 linux 多進程/多線程併發服務器簡單實現

首先補充一個關於read函數的點: 如果順利read()會返回實際讀到的字節數,最好能將返回值與參數count作比較,若返回的字節數比要求讀取的字節數少,則說明讀到了文件尾部。當有錯誤發生時則返回-1,錯誤代碼存入errno中,而

原创 linux 時序競態

pause函數 調用該函數可以造成進程主動掛起,等待信號喚醒。調用該系統調用的進程將處於阻塞狀態(主動放棄cpu) 直到有信號遞達將其喚醒。 int pause(void); 返回值:-1 並設置errno爲EINTR 返回值

原创 linux 基於網絡C/S非阻塞模型的epoll ET觸發模式(最常用的模型)

事件模型 EPOLL事件有兩種模型: Edge Triggered (ET) 邊緣觸發只有數據到來才觸發,不管緩存區中是否還有數據。 Level Triggered (LT) 水平觸發只要緩存區中有數據都會觸發。 思考如下步驟:

原创 linux epoll反應堆模型

epoll反應堆模型的流程: epoll_create(); // 創建監聽紅黑樹 epoll_ctl(); // 向書上添加監聽fd epoll_wait(); // 監聽 有客戶端連接上來--->lfd調用acceptconn

原创 linux 進程間通信-mmap

存儲映射I/O 存儲映射I/O (Memory-mapped I/O) 使一個磁盤文件與存儲空間中的一個緩衝區相映射。於是當從緩衝區中取數據,就相當於讀文件中的相應字節。於此類似,將數據存入緩衝區,則相應的字節就自動寫入文件。這樣

原创 linux 多線程下互斥鎖實現哲學家用餐模型

#include <stdio.h> #include <unistd.h> #include <pthread.h> #include <stdlib.h> pthread_mutex_t m[5];//定義5把鎖 //哲學家

原创 linux 信號2

sigaction函數 修改信號處理動作(通常在Linux用其來註冊一個信號的捕捉函數) int sigaction(int signum, const struct sigaction *act, struct sigactio

原创 linux 多進程下semaphore實現哲學家用餐模型

多進程下也就說先要開闢個共享存儲區實現進程間IPC,然後存儲區裏放的是5把鎖即可。 利用信號量機制實現。 #include <stdio.h> #include <unistd.h> #include <pthread.h> #i

原创 linux 多路IO轉接服務器之select

多路IO轉接服務器也叫做多任務IO服務器。該類服務器實現的主旨思想是,不再由應用程序自己監視客戶端連接,取而代之由內核替應用程序監視文件。 1.select能監聽的文件描述符個數受限於FD_SETSIZE,一般爲1024,單純改變

原创 linux UDP實現廣播和組播

廣播 廣播很簡單,原理不解釋了,這裏實現的重點在於: 1.對服務器端的套接字使用setsockopt函數開放廣播權限 2.指定要發送的IP(廣播地址)+端口號 3.客戶端必須顯式綁定端口號(和2的端口號要一樣) 例子: serve

原创 linux UDP的C/S模型

相較於TCP而言,UDP通信的形式更像是發短信。不需要在數據傳輸之前建立、維護連接。只專心獲取數據就好。省去了三次握手的過程,通信速度可以大大提高,但與之伴隨的通信的穩定性和正確率便得不到保證。因此,我們稱UDP爲“無連接的不可靠