Time of Update: 2017-02-27
在Linux系統下,我們一般不需要去釋放記憶體,因為系統已經將記憶體管理的很好。但是凡事也有例外,有的時候記憶體會被緩衝佔用掉,導致系統使用SWAP空間影響效能,此時就需要執行釋放記憶體(清理緩衝)的操作了。 Linux系統的緩衝機制是相當先進的,他會針對dentry(用於VFS,加速檔案路徑名到inode的轉換)、Buffer Cache(針對磁碟塊的讀寫)和Page
Time of Update: 2017-02-27
在Linux下編譯器有時會遇到這種問題,這貌似是一個Linux曆史遺留問題:/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’/usr/include/linux/types.h:13: error: previous declaration of ‘dev_t’ was here/usr/include/sys/types.h:67: error:
Time of Update: 2017-02-27
最近在Linux下編程發現一個詭異的現象,就是在連結一個靜態庫的時候總是報錯,類似下面這樣的錯誤:(.text+0x13): undefined reference to `func'關於undefined reference這樣的問題,大家其實經常會遇到,在此,我以詳細地樣本給出常見錯誤的各種原因以及解決方案,希望對初學者有所協助。1.連結時缺失了相關目標檔案(.o)測試代碼如下:然後編譯。gcc -c test.cgcc –c main.c得到兩個 .o 檔案,一個是 main.
Time of Update: 2017-02-27
下面通過最簡單的用戶端/伺服器程式的執行個體來學習socket API。echoser.c 程式的功能是從用戶端讀取字元 然後直接回射回去。/************************************************************************* > File Name: echoser.c > Author: Simba > Mail: dameng34@163.com > Created Time:
Time of Update: 2017-02-27
一、什麼是socketsocket可以看成是使用者進程與核心網路通訊協定棧的編程介面。socket不僅可以用於原生進 程間通訊,還可以用於網路上不同主機的處理序間通訊。socket API是一層抽象的網路編程介面,適用於各種底層網路通訊協定,如IPv4、IPv6,以及以後要講的UNIX Domain Socket。然而,各種網路通訊協定的地址格式並不相同,如下圖所示:IPv4和IPv6的地址格式定義在netinet/in.h
Time of Update: 2017-02-27
一、在前面介紹了system v 訊息佇列的相關知識,現在來稍微看看posix 訊息佇列。其實訊息佇列就是一個可 以讓進程間交換資料的場所,而兩個標準的訊息佇列最大的不同可能只是api 函數的不同,如system v 的系列函數是 msgxxx,而posix 是mq_xxx。posix 訊息佇列也有一些對訊息長度等的限制,man 7 mq_overview:simba@ubuntu:~/Documents/code/linux_programming/UNP/posix$ cat
Time of Update: 2017-02-27
一、msgsnd 和 msgrcv 函數#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h>功能:把一條訊息添加到訊息佇列中原型 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);參數msgid: 由msgget函數返回的訊息佇列標識碼msgp:是一個指標,
Time of Update: 2017-02-27
一、訊息佇列1、訊息佇列提供了一個從一個進程向另外一個進程發送一塊資料的方法2、每個資料區塊都被認 為是有一個類型,接收者進程接收的資料區塊可以有不同的類型值3、訊息佇列與管道不同的是,訊息佇列是基於訊息 的,而管道是基於位元組流的,且訊息佇列的讀取不一定是先入先出。4、訊息佇列也有管道一樣的不足,就是每個訊息的 最大長度是有上限的(MSGMAX),每個訊息佇列的總的位元組數是有上限的(MSGMNB),系統上訊息佇列的總數也有一個上限
Time of Update: 2017-02-27
在前面介紹了system v 共用記憶體的相關知識,現在來稍微看看posix 共用記憶體 和系列函數。共用記憶體簡單來說 就是一塊真正的實體記憶體地區,可以使用一些函數將這塊區域對應到進程的地址空間進行讀寫,而posix 共用記憶體與system v 共用記憶體不同的是它是用虛擬檔案系統(tmpfs)實現的,已經掛載在/dev/shm 下面。man 7 shm_overview下面 來看系列函數,編譯時間候加上 -lrt 選項,即串連librt 庫
Time of Update: 2017-02-27
基於生產者-消費者模型實現先進先出的共用記憶體段生產者消費者問題:該問題描述了兩個共用固定大小緩衝區的進程——即所謂的“生產者”和“消費者”——在實際運 行時會發生的問題。生產者的主要作用是產生一定量的資料放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區
Time of Update: 2017-02-27
用訊號量實現進程互斥樣本和解決哲學家就餐問題一、我們在前面講處理序間通訊的時候提到過進程互斥的概念,下面寫個程式來類比一下,程式流程如下圖:即父進程列印字 符O,子進程列印字元X,每次列印一個字元後要sleep 一下,這裡要示範的效果是,在列印程式的邊界有PV操作,故每個進 程中間sleep 的時間即使時間片輪轉到另一進程,由於資源不可用也不會穿插輸出其他字元,也就是說O或者X字元都會是成 對出現的,如OOXXOOOOXXXXXXOO....程式如下:#include<sys/types.
Time of Update: 2017-02-27
與訊息佇列和共用記憶體一樣,訊號量集也有自己的資料結構:struct semid_ds {struct ipc_perm sem_perm; /* Ownership and permissions */time_t sem_otime; /* Last semop time */time_t sem_ctime; /* Last change time */unsigned short sem_nsems; /*
Time of Update: 2017-02-27
跟訊息佇列一樣,共用記憶體也有自己的資料結構,如下:struct shmid_ds {struct ipc_perm shm_perm; /* Ownership and permissions */size_t shm_segsz; /* Size of segment (bytes) */time_t shm_atime; /* Last attach time */time_t &
Time of Update: 2017-02-27
一、共用記憶體簡介共用記憶體區是最快的IPC形式,這些進程間資料傳遞不再涉及到核心,換句話說是進程不再通 過執行進入核心的系統調用來傳遞彼此的資料。即每個進程地址空間都有一個共用儲存空間的映射區,當這塊地區都映射到相同的真正的物理地址空間時,可以通過這塊 地區進行資料交換,例如共用庫就是這麼實現的,很多進程都會使用同一個函數如printf,也許在真正的物理地址空間中只 存在一份printf.o ,然後所有進程都映射到這一份printf.o
Time of Update: 2017-02-27
驅動程式編寫基本流程:1.首先是一些版本資訊,沒什麼用,但是不能少#define __NO_VERSION__#include <linux/modules.h>#include <linux/version.h>char kernel_version[] = UTS_RELEASE;2.為了把系統調用和驅動程式關聯起來,需要一個非常關鍵的資料結構:struct
Time of Update: 2017-02-27
一.POSIX共用記憶體的實現共用記憶體是在進程間共用某一塊記憶體。是最快一種ipc通訊機構。其中posix共用記憶體機制 它主要是通過記憶體映射(mmap)機制來實現的。在進程間共用記憶體使用量如下固定步驟:1.建立一個共用記憶體int shm_open(const char *name, int oflag, mode_t
Time of Update: 2017-02-27
1.核心中每個字元裝置都對應一個 cdev 結構的變數,下面是它的定義:linux-2.6.22/include/linux/cdev.hstruct cdev { 13 struct kobject kobj; 14 struct module *owner; 15 const struct
Time of Update: 2017-02-27
下面就開始我們的多播編程了:一、多播的概念多播,也稱為“組播”,將網路中同一業務類型主機進行了邏輯上的分組,進行資料收發的時候其資料僅僅在同一分組中進行,其他的主機沒有加入此分組不能收發對應的 資料。在 廣域網路上廣播的時候,其中的交換器和路由器只向需要擷取資料的主機複製並轉寄資料。主機可以向路由器請求加入或退出某個組,網路中的路由器和交換器有選擇
Time of Update: 2017-02-28
VIM退出命令,vim退出注意:這些命令前面都有一個冒號:當編輯完文檔,準備退出Vi返回到shell時,能夠使用以下幾種方法之一。在命令模式中,連按兩次大寫字母Z,若當前編輯的文檔曾被修改過,則Vi儲存該文檔後退出,返回到shell;若當前編輯的文檔沒被修改過,則Vi直接退出, 返回到shell。在末行模式下,輸入命令:wVi儲存當前編輯文檔,但並不退出,而是繼續等待使用者輸入命令。在使用w命令時,能夠再給編輯文檔起一個新的文檔名。[例6]:w
Time of Update: 2017-02-28
虛擬機器centos7 安裝was和ihs,centos7ihs 虛擬機器中網卡配置: 為虛擬機器設定兩張網卡,一個為net直連 dhcp方式(串連外網) 一個為僅主機模式 static方式 (內網使用) 配置vm網卡ip段 進入系統查看網路設定 eth0為外網 eth1為內網 開啟ifcfg-eth1