2010 07 22 Linux C 程序程式設計

2021-06-16 04:26:17 字數 1472 閱讀 6254

1、獲取本程序id                    pid_t  getpid(void)

2、獲取父程序id                    pid_t  getppid(void)

3、建立子程序                        pid_t  fork(void)  

//被呼叫一次,卻返回兩次,它可能有三種不同的返回值:

//在父程序中,fork返回新建立的子程序的pid

//在子程序中,fork返回0

//如果出錯,fork返回乙個負值

//用fork建立子程序時,子程序和父程序fork後面的**是共享的,但子程序的資料空間和堆疊空間都會從父程序得到乙個拷貝,二不是共享。

4、建立子程序                        pid_t  vfork(void) 

5、fork()與vfork()比較

(1)fork: 子程序拷貝父程序的資料段    vfork():子程序與父程序共享資料段

(2)fork:父程序與子程序的執行次序不確定  vfork():子程序先執行,父程序後執行

6、exec函式族

//exec用被執行的程式替換呼叫它的程式

//exec 不會建立乙個新程序,它會執行乙個程式,用這個執行的程式**去替換原有程序的**

7、 int exec(const char * path,cosnt char * arg1,.....)

// path :被執行程式名(包含完整路徑)

// arg1.....argn :被執行程式所需的命令列引數,包含程式名。以空指標(null)結束。

//execl("/bin/ls","ls","-al","/etc/passwd",(char *) 0);

8、execlp(const char * path,cosnt char * arg1,.....)

// path :被執行程式名(不包含完整路徑,從path環境變數中查詢改程式)

// arg1.....argn :被執行程式所需的命令列引數,包含程式名。以空指標(null)結束。

//execlp("ls","ls","-al","/etc/passwd",(char *) 0);

9、int execv(const char * path, char *cosnt argv)

// path :被執行程式名(包含完整路徑)

// argv:被執行程式所需的命令列引數陣列

char * argv=;

execv("/bin/ls",argv);

10、int system(const char * string)

//功能:呼叫fork產生子程序,有子程序來呼叫/bin/sh/ -c string 來執行引數string

11、pid_t  wait(int *status)

//阻塞改父程序,直到其某個子程序退出。

//#include #include wait(null);

Linux C程序 執行緒

1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...

linux c 程序學習

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

linux c程序監控

我們經常需要實現程序監控,如果某一程序異常退出或是跑飛則立即重啟。通常使用的有2種方法 一.supervisor來管理程序。二.自己寫程式來監管。對於1而言,有些檔案系統中不支援,需要移植安裝。對於2而言,不少都是單獨寫個監管程式,通過寫入檔案pid定時檢查程序pid是否存在,或是檢視是否有此程序名...