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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章