APUE 學習(一)

1、如果一個進程fork一個子進程,但不要等待子進程終止,也不希望子進程處於僵死狀態,直到父進程終止,實現這一技巧是fork兩次(子進程fork一次,然後exit)


2、fork和vfork之間的區別

vfork用於創建一個新進程,而該新進程的目的是exec一個新程序;


vfork和fork一樣都創建一個子進程,當時它不將父進程的地址空間完全複製到子進程中,因爲子進程會立即調用exec(或exit),於是也就不會訪問該地址空間。 相反,在子進程exec或exit前,它在父進程的空間中運行。


3、exec


當進程調用一種exec的時,該進程的執行完全替換爲新程序,而新程序則從其main函數開始執行,因爲調用exec並不創建新進程,所以前後的秦城ID並沒有改變。 exec只是用一個全新的程序替換了當前進程的正文、數據、堆和棧。



4、atexit函數


#include <stdlib.h>


int atexit( void (*func)(void) );


登記的進程將有exit自動調用,調用順序FILO.


5、setjump 和 longjmp函數


非局部goto,這不是由普通C語言goto語句在一個函數體內實施的跳轉,而是在棧上跳過若干調用幀,返回到當前函數調用路徑上的某一個函數中。


#include <setjmp.h>


int setjmp(jmp_buf env);


int longjmp(jmp_buf env, int val);


6、字符串宏創建符 #


#define doit(name)   pr_limit( #name, name);
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
閱讀(5) | 評論(0) | 轉發(0) |
0

上一篇:Buffer Overflow

下一篇:APUE 學習(二) 信號

給主人留下些什麼吧!~~
評論熱議
發佈了51 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章