linux網路編程之socket(一):socket概述和位元組序、地址轉換函式

一、什麼是socketsocket可以看成是使用者進程與核心網路通訊協定棧的編程介面。socket不僅可以用於原生處理序間通訊,還可以用於網路上不同主機的處理序間通訊。socket API是一層抽象的網路編程介面,適用於各種底層網路通訊協定,如IPv4、IPv6,以及以後要講的UNIX Domain Socket。然而,各種網路通訊協定的地址格式並不相同,如所示:IPv4和IPv6的地址格式定義在netinet/in.h中,IPv4地址用sockaddr_in結構體表示,包括16位連接埠號碼和3

Linux 多線程編程(Pthread 庫)學習筆記 一

 概述多線程程式作為一種多任務、並發的工作方式,有以下的優點:1) 提高應用程式響應。這對圖形介面的程式尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程式不會響應鍵盤、滑鼠、菜單的操作,而使用多線程技術,將耗時間長度的操作(time consuming)置於一個新的線程,可以避免這種尷尬的情況。2) 使多CPU系統更加有效。作業系統會保證當線程數不大於CPU數目時,不同的線程運行於不同的CPU上。3)

Linux 多線程編程(Pthread 庫)學習筆記 二

 線程資料處理 之 線程資料  為了保護變數,我們必須使用訊號量、互斥等方法來保證我們對變數的正確使用。1) 線程資料在單線程的程式裡,有兩種基本的資料:全域變數和局部變數。但在多線程程式裡,還有第三種資料類型:線程資料(TSD: Thread-Specific Data)。它和全域變數很象,線上程內部,各個函數可以象使用全域變數一樣調用它,但它對線程外部的其它線程是不可見的.線程儲存的具體用法建立一個類型為 pthread_key_t 類型的變數。           調用

Linux 多線程編程(Pthread 庫)學習筆記 三

 線程的資料處理 之 互斥鎖互斥鎖互斥鎖用來保證一段時間內只有一個線程在執行一段代碼pthread_mutex_lock聲明開始用互斥鎖上鎖,此後的代碼直至調用pthread_mutex_unlock為止,均被上鎖,即同一時間只能被一個線程調用執行。當一個線程執行到pthread_mutex_lock處時,如果該鎖此時被另一個線程使用,那此線程被阻塞,即程式將等待到另一個線程釋放此互斥鎖 a線程先鎖定互斥鎖1,b線程先鎖定互斥鎖2,這時就出現了死結。此時我們可以使用函數

gdb用法(二) 在Linux下產生並調試core檔案

分析核心(core)檔案  在程式發生崩潰時,有時可能無法直接運行GDB來進行調試。比如程式可能是在另外一台機器上啟動並執行,或者因為程式對時間比較敏感,所以手動跟蹤調試會產生無法接受的延遲等。遇到這些情況,就只能等到程式運行結束後才能判斷崩潰的原因了。這時需要用到Linux提供的core

常見的LINUX發行版安裝libiconv庫方法

 今天編譯器,發現程式報錯,如下cannot find -liconv collect2: ld returned 1 exit status或者undefined reference to `libiconv_open'   collect2: ld returned 1 exit status是因為沒有安裝liconv包 iconv命令是用來轉換檔的編碼方式的(Convert encoding of given files from one encoding to

《鳥哥的linux私房菜》基本命令筆記

1.以前沒注意過的,略寫的命令option後面只能空格後加參數,而標準option即可以空格也可以等號後跟著參數,如date命令,date -r filename ;; date --reference filename ;; date --reference=filename 都是正確的。2.對於目錄來說,即使有r,沒有X,也不能進入目錄。對於檔案來說,x表示這個檔案可以被使用者執行,但能不能執行成功,當然得看本身裡面的內容了。3.檔案種類:普通檔案 -純文字ASCII

linux中touch命令參數修改檔案的時間戳記

linux中touch命令參數不常用,一般在使用make的時候可能會用到,用來修改檔案時間戳記,或者建立一個不存在的檔案,以下是linux中touch命令參數的使用方法:   touch [-acm][-r ref_file(參照檔案)|-t time(時間值)] file(檔案名稱)   example:  touch file1.txt 更新file1.txt的存取和修改時間  touch -c file1.txt 如果file1.txt不存在,不建立檔案  touch -r

linux網路編程之System V 訊息佇列(一):訊息佇列核心結構和msgget、msgctl 函數

一、訊息佇列1、訊息佇列提供了一個從一個進程向另外一個進程發送一塊資料的方法2、每個資料區塊都被認為是有一個類型,接收者進程接收的資料區塊可以有不同的類型值3、訊息佇列與管道不同的是,訊息佇列是基於訊息的,而管道是基於位元組流的,且訊息佇列的讀取不一定是先入先出。4、訊息佇列也有管道一樣的不足,就是每個訊息的最大長度是有上限的(MSGMAX),每個訊息佇列的總的位元組數是有上限的(MSGMNB),系統上訊息佇列的總數也有一個上限(MSGMNI),這三個參數都可以查看:simba@ubuntu:~

linux網路編程之System V 訊息佇列(二):訊息佇列實現回射客戶/伺服器和 msgsnd、msgrcv 函數

一、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:是一個指標,指標指向準備發送的訊息結構體msgsz:

Linux下動態庫(.so)和靜態庫(.a)

linux下有兩種庫:動態庫和靜態庫(共用庫)二者的不同點在於代碼被載入的時刻不同。靜態庫的代碼在編譯過程中已經被載入可執行程式,因此體積比較大。動態庫(共用庫)的代碼在可執行程式運行時才載入記憶體,在編譯過程中僅簡單的引用,因此代碼體積比較小。不同的應用程式如果調用相同的庫,那麼在記憶體中只需要有一份該動態庫(共用庫)的執行個體。靜態庫和動態庫的最大區別,靜態情況下,把庫直接載入到程式中,而動態庫連結的時候,它只是保留介面,將動態庫與程式碼獨立,這樣就可以提高代碼的可複用度,和降低程式的耦合度

快速使用locate命令尋找Linux中的檔案

在浩瀚的Linux中,尋找某個檔案是件非常要命的事兒。我試過很多方法,最簡單、最方便的一種是利用locate命令和updatedb命令配合的方法: 比如,我們要尋找一個檔案名稱中帶“chen”字串的檔案,這樣做: [root@locahost /]# locate chen 這樣就能出現一大串蘊含chen字串檔案名稱的檔案。 注意,locate執行後的結果不一定準確,有可能最近的一段時間內其他使用者添加了或刪除了某個喊“chen”的檔案,沒關係,執行: [root@locahost /]#

linux網路編程之共用記憶體簡介和mmap 函數

一、共用記憶體簡介共用記憶體區是最快的IPC形式,這些進程間資料傳遞不再涉及到核心,換句話說是進程不再通過執行進入核心的系統調用來傳遞彼此的資料。即每個進程地址空間都有一個共用儲存空間的映射區,當這塊地區都映射到相同的真正的物理地址空間時,可以通過這塊地區進行資料交換,例如共用庫就是這麼實現的,很多進程都會使用同一個函數如printf,也許在真正的物理地址空間中只存在一份printf.o ,然後所有進程都映射到這一份printf.o

linux網路編程之System V 共用記憶體 和 系列函數

跟訊息佇列一樣,共用記憶體也有自己的資料結構,如下: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     shm_dtime;   /* Last detach time

linux網路編程之System V 訊號量(二):用訊號量實現進程互斥樣本和解決哲學家就餐問題

一、我們在前面講處理序間通訊的時候提到過進程互斥的概念,下面寫個程式來類比一下,程式流程如:即父進程列印字元O,子進程列印字元X,每次列印一個字元後要sleep 一下,這裡要示範的效果是,在列印程式的邊界有PV操作,故每個進程中間sleep 的時間即使時間片輪轉到另一進程,由於資源不可用也不會穿插輸出其他字元,也就是說O或者X字元都會是成對出現的,如OOXXOOOOXXXXXXOO....程式如下: C++ Code 123456789101112131415161718192021222324

linux網路編程之POSIX 共用記憶體和 系列函數

在前面介紹了system v 共用記憶體的相關知識,現在來稍微看看posix 共用記憶體 和系列函數。共用記憶體簡單來說就是一塊真正的實體記憶體地區,可以使用一些函數將這塊區域對應到進程的地址空間進行讀寫,而posix 共用記憶體與system v 共用記憶體不同的是它是用虛擬檔案系統(tmpfs)實現的,已經掛載在/dev/shm 下面。man 7 shm_overview下面來看系列函數,編譯時間候加上 -lrt 選項,即串連librt 庫

linux網路編程之處理序間通訊基礎(一):處理序間通訊概述

一、順序程式與並發程式特徵順序程式特徵順序性封閉性:(運行環境的封閉性)確定性可再現性並發程式特徵共用性並發性隨機性二、進程互斥1、由於各進程要求共用資源,而且有些資源需要互斥使用,因此各進程間競爭使用這些資源,進程的這種關係為進程的互斥2、系統中某些資源一次只允許一個進程使用,稱這樣的資源為臨界資源或互斥資源。3、在進程中涉及到互斥資源的程式段叫臨界區舉例如:假設x = 1;

linux網路編程之System V 訊號量(三):基於生產者-消費者模型實現先進先出的共用記憶體段

生產者消費者問題:該問題描述了兩個共用固定大小緩衝區的進程——即所謂的“生產者”和“消費者”——在實際運行時會發生的問題。生產者的主要作用是產生一定量的資料放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些資料。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入資料,消費者也不會在緩衝區中空時消耗資料。我們可以用訊號量解決生產者消費者問題,如:定義3個訊號量,sem_full 和 sem_empty 用於生產者進程和消費者進程之間同步,即緩衝區為空白才能生產,緩衝區不為空白才能消費。

總頁數: 4065 1 .... 402 403 404 405 406 .... 4065 Go to: 前往
Tags Index:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。