原创 sync、fsync、fdatasync三個函數以及O_SYNC標誌位的區別

在大多數的unix/linux對磁盤io的寫操作都是通過緩存來完成的,基本的原理如下:當將數據寫入文件時,內核通常先將該數據複製到其中一個緩衝區中,如果該緩衝區尚未寫滿,則並不將其排入輸出隊列,而是等待其寫滿或者當內核需要重用該緩衝區以便

原创 Linux進程間通信(二)FIFO

1.從FIFO中讀取數據: 約定:如果一個進程爲了從FIFO中讀取數據而阻塞打開了FIFO,那麼稱該進程內的讀操作爲設置了阻塞標誌的讀操作。 (1)如果有進程寫打開FIFO,且當前FIFO爲空,則對於設置了阻塞標誌的讀操作來說,將一直阻塞

原创 Linux動態庫的查找路徑

前兩天寫了一個動態庫,然後試圖編譯到程序裏面去運行,結果發現編譯的時候通過gcc的-L參數來指定路徑僅僅能讓編譯通過,運行時還是會出問題的。 比如下面這個例子: main.c是主程序,sum.c中間含有一個函數add,用來執行加法,

原创 Analysis of Linux kernel crashes

From: http://stablebits.blogspot.hk/IntroductionToolsFormat of a crash reportAnalysis Simple case to learn the basicsCr

原创 C語言全局變量那些事兒

作爲一名程序員,如果說沉迷一門編程語言算作一種樂趣的話,那麼與此同時反過來去黑一門編程語言就是這種樂趣的昇華。今天我們就來黑一把C語言,好好展示一下這門經典語言令人抓狂的一面。 我們知道,全局變量是C語言語法和語義中一個很重要的知

原创 c/c++中文件的操作大全,可以瞭解向文件讀取一個結構體

文件的基本概念   所謂“文件”是指一組相關數據的有序集合。 這個數據集有一個名稱,叫做文件名。實際上在前面的各章中我們已經多次使用了文件,例如源程序文件、目標文件、可執行文件、庫文件 (頭文件)等。文件通常是駐留在外部介質(如磁盤等)

原创 文件結構體struct file(Linux 2.6.23內核) (轉)

struct file結構體定義在/linux/include/linux/fs.h(Linux 2.6.11內核)中,其原型是: struct f

原创 Linux進程間通信(一)管道

一個進程在管道的尾部寫入數據,另一個進程從管道的頭部讀出數據。 管道包括無名管道和有名管道兩種,前者只能用於父進程和子進程間的通信,後者可用於運行於同一系統中的任意兩個進程間的通信。 管道通信-特點 管道通訊是單向的,有固定的讀端和寫

原创 C++ erase的用法

STL中list的erase用法 erase的作用是,使作爲參數的迭代器失效,並返回指向該迭代器下一參數的迭代器。 如下: list<DotSource>ParticleSystem; list<DotSource>::iterator

原创 使用信號量控制Linux線程同步

linux中兩種基本的同步方法是信號量和互斥量。這兩種方法很相似,而且它們可以相互通過對方來實現。 信號量概述 下面介紹用信號量進行同步。 信號量概念由荷蘭科學家Dijkstra首先提出。信號量是一個特殊類型的變量,它

原创 waitpid非阻塞時的用法

我們用這個程序和輸出結果分析一下waitpid的用法和特點。我們將waitpid設置成WNOHANG非阻塞父進程狀態; #include <sys/types.h> #include <sys/wait.h> #include <unis

原创 殭屍進程的產生和避免

殭屍進程的產生: 當一個進程創建了一個子進程時,他們的運行時異步的。即父進程無法預知子進程會在什麼時候結束,那麼如果父進程很繁忙來不及wait 子進程時,那麼當子進程結束時,會不會丟失子進程的結束時的狀態信息呢?處於這種考慮unix提

原创 ARM Linux從Bootloader、kernel到filesystem啓動流程

ARM Linux啓動流程大致爲:bootloader ---->kernel---->root filesystem。bootloader 是一上電就拿到cpu 的控制權的,而bootloader實現了硬件的初始化。bootloader

原创 Linux下動態共享庫加載時的搜索路徑詳解

對動態庫的實際應用還不太熟悉的讀者可能曾經遇到過類似“error while loading shared libraries”這樣的錯誤,這是典型

原创 求教關於被調函數中的malloc與free

【問題一】:在子函數中動態分配內存:p=(int*)malloc(a*sizeof(int)),這個函數的目的是返回p:return(p)我想問問,該在什麼地方進行free(p)呢?如果在子函數中的return前free是肯定不行的,在之