原创 linux__mutex互斥鎖___操作
[html] view plaincopy mutex是死等鎖,即pthread_mutex_lock(&mutex);這條語句在執行的後,做兩步,1,先判斷當前是否可以鎖,如別的線程在鎖住,這裏就一直等待直到別的線程
原创 pthread_mutex_init() -- 互斥鎖初始化|pthread_mutex_destroy()--互斥鎖銷燬
原型: #include <pthread.h>int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric
原创 system函數調用
相關函數 fork,execve,waitpid,popen 表頭文件 #include<stdlib.h> 定義函數 int system(const char * string); 函數說明 system()
原创 C語言system()函數
system()函數功能強大,很多人用卻對它的原理知之甚少先看linux版system函數的源碼: #include <sys/types.h> #include <sys/wait.h> #include <errno.h> #i
原创 atexit函數
很多時候我們需要在程序退出的時候做一些諸如釋放資源的操作,但程序退出的方式有很多種,比如main()函數運行結束、在程序的某個地方用exit() 結束程序、用戶通過Ctrl+C或Ctrl+break操作來終止程序等等,因此需要有一種與程
原创 Linux kernel 內存屏障在RCU上的應用
內存屏障主要解決的問題是編譯器的優化和CPU的亂序執行。 編譯器在優化的時候,生成的彙編指令可能和c語言程序的執行順序不一樣,在需要程序嚴格按照c語言順序執行時,需要顯式的告訴編譯不需要優化,這在linux下是通過barrier
原创 使用tcgetattr函數與tcsetattr函數控制終端
6.4.4 使用tcgetattr函數與tcsetattr函數控制終端 爲了便於通過程序來獲得和修改終端參數,Linux還提供了tcgetattr函數和tcsetattr函數。tcgetattr用於獲取終端的相關參數,而tcse
原创 vi編輯器常用命令
vi編輯器有3種模式:命令模式、輸入模式、末行模式。掌握這三種模式十分重要: 1.命令模式:vi啓動後默認進入的是命令模式,從這個模式使用命令可以切換到另外兩種模式,同時無論在任何模式下只要按一下[Esc]鍵都可以返回命令模式。
原创 Linux內核部件分析之連通世界的list
轉自:http://www.linuxidc.com/Linux/2011-10/44627.htm 在linux內核中,有一種通用的雙向循環鏈表,構成了各種隊列的基礎。鏈表的結構定義和相關函數均在include/linux/list.
原创 strrchr函數
函數簡介 函數名稱: strrchr 函數原型:char *strrchr(const char *str, char c); 所屬庫: string.h 函數功能:查找一個字符c在另一個字符串str中末次出現的位置(也就是從s
原创 Linux 的cp命令
功能: 複製文件或目錄 說明: cp指令用於複製文件或目錄,如同時指定兩個以上的文件或目錄,且最後的目的地是一個已經存在的目錄,則它會把前面指定的所有文件或目錄複製到此目錄中。若同時指定多個文件或目錄,而最後的目的地並非一個已存在的目錄
原创 IP地址轉換、主機大小端、htonl、ntohl實現
[cpp] view plaincopy #include <IOSTREAM> //#include <WINSOCK.H> using namespace std; typedef unsigne
原创 QT QString, wchar_t *, TCHAR, CString和其他字符或字符串類型的轉化
[cpp] view plaincopy //QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast<const wchar_t
原创 TCP、UDP協議詳解
</pre></h1><div class="postBody"><div id="cnblogs_post_body"><pre id="best-answer-content" class="reply-text mb10" n
原创 gcc的內建函數__builtin_expect
1.問題引出 在內核代碼的條件分支中的判斷中,經常可以看到如下兩條語句: [cpp] view plaincopy /* ...... */ if(unlikely(!something)) /* ...... */ if