Linux C 程序學習的筆記

2021-07-23 22:51:51 字數 3461 閱讀 8449

一、

程序的建立

fork(),

vfork()

兩個函式都可以進行程序的建立,但是卻稍有不同

fork函式建立的子程序是將父程序的資源拷貝乙份

vfork函式建立的子程序是與父程序共享資料空間,而不是單純的拷貝

此外,在呼叫vfork函式的時候,子程序必須要先退出,父程序才能繼續執行 二、

程序的執行

1.execl

函式的作用:

執行乙個檔案,

函式原型:  int execl(const char *path, const char *arg,..)

引數說明: path:代表的檔案路徑;

arg: 表示

argv[0], argv[1],...

最後乙個以null結束;

返回值:成功函式沒有返回,出錯-1;

2.execv

函式的作用:

函式原型:int exev(const char *path, char * const argv)

函式的引數:  path:代表的檔案路徑;

argv:是乙個陣列裡的指標傳遞過來;       

返回值:

成功不返還,出錯-1

注:exec函式族都是與程序執行相關的函式,這裡只列舉了其中兩個,關於

exec

函式組的整理在之前的部落格中有寫到過

3. system

函式的作用:執行乙個命令

函式的原型: int system(const char * string);

三、程序的等待

1.wait

函式的作用:

程序的等待,阻塞程序,等待某個子程序退出;

函式的原型:  pid_t wait(int *status);

返回值:成功返回子程序pid,出錯-1;

2.waitpid

函式的作用:等待退出,等待訊號,或者指定的程序結束

函式的原型:pid_t  waitpid(pid_t pid , int *status, int options);

函式的引數:

pid <-1 :等待程序的

pid絕對值的任何的子程序;

pid=-1, 任何子程序,

---等於

wait

;pid=0,

pid >0, 等待子程序為

pid的子程序退出

options:

wnohang:如果沒有子程序退出,馬上返回不等待

wuntraced:如果子程序進入暫停執**況,馬上返回,

返回值:如果執行成功返回的是子程序的pid,失敗-1;

如果使用wnohang的時候,沒有子程序退出則返回0。

所以,實際上wait函式是

waitpid

函式的乙個特例。 四、

程序的退出

1.exit  

函式的作用:正常結束程序

函式原型: void  exit(int status)

_exit()函式和

exit()

函式的區別在於,

exit()

函式在退出後會將

io緩衝區一併清除,而

_exit()

函式並不會這樣 五、

程序相關函式的使用

1.如何新建立乙個程序?

#include

#include

#include

#include

#include

#include

#include

/* 程序建立

*/void main(void)

else if(child==0) // 子程序

while(((child=wait(&status))==-1)&(errno==eintr));  //子程序未結束

if(child==-1)

printf("wait error: %s\n", strerror(errno));

else if(!status)             // 子程序退出值為

0printf("child %ld terminated normally return status is zero\n", child);

else if(wifexited(status))   // 子程序退出值

0printf("child %ld terminated normally return status is %d\n", child, wexitstatus(status));

else if(wifsignaled(status)) // 子程序未獲訊號而退出

printf("chlid %ld terminated due to signal %d not caught\n", child, wtermsig(status)); }

2.有哪幾個函式返回的是子程序的pid?

總共有4個函式

①wait

:函式執行成功時返回的是子程序的

pid②waitpid

:執行成功時返回子程序的

pid③fork

:如果返回值

>0

,則返回的是子程序的程序號

④vfork

:同fork 3.

wait函式的使用例項

#include

#include

#include

#include

int main(void)

else

return 0; }

4.waitpid函式的使用例項

#include

#include

#include

#include

#include

void die(const char *msg)

void child2_do()

} void child1_do(pid_t child2, char *argv)

else

if (pw == 0)

}while (pw == 0);

if (pw == child2) }

else }

void father_do(pid_t child1, char *argv)

else

if (pw == 0)

}while (pw == 0);

if (pw == child1) }

else }

int main(int argc, char *argv)

child1 = fork();

if (child1 < 0)

else if (child1 == 0)

else if (child2 == 0)

else }

else

return 0; }

linux c 程序學習

1.fork 由於fork後的父程序與子程序的優先順序是一樣的,所以會存在父程序已經退出了而子程序還在執行,這時候的子程序就是孤兒程序,會被init程序收養,所以這時候getppid得到的1。int main exit 0 2.vfork 由vfork也是用來建立程序,但是子程序是共享父程序的位址空...

Linux C 學習筆記

1.linux 程序與訊號 檢視當前系統所有程序的shell命令 ps aux 檢視程序樹 pstree 檢視當前使用者啟動的程序 ps af kill 程序號 kill 9 程序號 強行殺死程序 killall 程序名字 如果乙個程序的父程序被殺死 則init就程式設計當前程序的父程序 了解實時作...

linux c語言學習筆記之守護程序

守護程序 概述 守護程序 daemon 是生存期長的一種程序。它們常常在系統引導裝入時起動,在系統關閉時終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux 系 統有很多守護程序,它們執行日常事物活動。所有守護程序都以超級使用者 使用者i d 為0 的優先權執行。沒有乙個守護程序具有控制...