程序學習總結(一)

2021-08-18 10:16:36 字數 1690 閱讀 3205

程序學習總結(一)

在計算機中,程序是正在執行的電腦程式的例項。它包含程式**及其當前活動(即程式的狀態)。乙個程序可能由多個並行執行指令的執行執行緒組成。

c程式⼀直由下列⼏部分組成:

這是由c p u執⾏的機器指令部分。通常,正⽂段是可共享的,所以即使是經常執⾏的程式(如⽂本編輯程式、 c編譯程式、 s h e l l等)在儲存器中也只需有⼀個副本,另外,正⽂段常常是唯讀的,以防⽌程式由於意外事故⽽修改其⾃身的指令。

初始化資料段通常將此段稱為資料段,它包含了程式中需賦初值的變數。全域性變數就是初始化資料段。

例如:int global = 88;

⾮初始化資料段

⾮初始化資料段通常稱為b s s段(block started bysymbol(由符號開始的塊))。全域性變數的宣告就是非初始化資料段。

例如:long sum[1000] ;

此變數存放在⾮初始化資料段中。

⾃動變數以及每次函式調⽤時所需儲存的資訊都存放在此段中。每次函式調⽤時,其返回位址、以及調⽤者的環境資訊(例如某些機器暫存器)都存放在棧中。然後,新被調⽤的函式在棧上為其⾃動和臨時變數分配儲存空間。

例如:c函式遞迴調⽤的返回的臨時變數就是儲存在棧裡。

動態儲存分配的變數就是儲存在堆上。

#include

int main() else if (pid == 0) else {

sleep(2);                               /* parent */

printf("pid = %ld, glob = %d, var= %d\n", (long)getpid(), globvar, var);

return 0;

[root@localhost proc]# ./a.out

a write to stdout

before fork

pid = 6084, glob = 7, var = 89

pid = 6083, glob = 6, var = 88

[root@localhost proc]# ./a.out  > a.log

[root@localhost proc]# vi a.log

[root@localhost proc]# tail -f a.log

a write to stdout

before fork

pid = 6100, glob = 7, var = 89

before fork

pid = 6099, glob = 6, var = 88

write函式是不帶快取的。因為在fork之前調⽤write,所以其資料寫到標準輸出⼀次。

標準 i / o庫是帶快取的。如果標準輸出連到終端裝置,則它是⾏快取的,否則它是全快取的。當以互動⽅式運⾏該程式時,只得到printf輸出的⾏⼀次,其原因是標準輸出快取由新⾏符重新整理。

但是當將標準輸出重新定向到⼀個⽂件時,卻得到 print f輸出⾏兩次。其原因是,在 fork之前調⽤了printf⼀次,但當調⽤fork時,該⾏資料仍在快取中,然後在⽗程序資料空間複製到⼦程序中時,該快取資料也被複製到⼦程序中。於是那時⽗、⼦程序各⾃有了帶該⾏內容的快取。

在 exit之前的第⼆個printf將其資料新增到現存的快取中。當每個程序終⽌時,其快取中的內容被寫到相應⽂件中。

[1].《unix高階程式設計》

[2].

linux程序 學習總結

學習檔案之後,緊接著學習程序的相關知識,這一章主要也是一些api的操作學習。首先程序是什麼啊,應該是某一執行某乙個程式吧,就先這樣理解吧 1.獲取程序描述符getpid man手冊 include include pid t getpid void pid t getppid void 操作 pid...

程序間通訊總結(一)

了解程序間通訊 ipc,internet process connect 我們要搞明白程序間為什麼要通訊,會遇到哪幾種情況,針對這些情況我們分別怎麼來解決。下面我們來說下程序間通訊的目的,然後針對這些問題進行解決。1,資料傳輸 乙個程序向另乙個程序傳輸資料。2,資源共享 多個程序共享一段資源。3,通...

Linux 程序學習 一

知識點1 程序概念 程序是作業系統最核心的概念之一。程序簡單而言是作業系統中執行的程式,它是作業系統資源管理的最小單元。程序是乙個動態的實體,是程式的一次執行過程。程序和程式的區別在於 程序是動態的,程式是靜態的,程序是執行中的程式,而程式是儲存在硬碟上的可執行的 知識點2 程序三態 1 執行 乙個...