lienhua342014-10-12当一个进程正常或者异常终止时,内核就向其父进程发送 SIGCHLD信号。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用的函数(信号处理程序)。对于这种信号的系统默认动作是忽略它。在文档“进程控制三部曲”中,我们讲的第三部曲是使用 wait 函数来获取...
分类:
系统相关 时间:
2014-10-13 01:20:08
阅读次数:
375
lienhua342014-10-07在文档“进程控制三部曲”中,我们提到 fork 函数创建子进程之后,通常都会调用 exec 函数来执行一个新程序。调用 exec 函数之后,该进程就将执行的程序替换为新的程序,而新的程序则从 main 函数开始执行。UNIX 提供了 6 种不同的 exec 函数...
分类:
其他好文 时间:
2014-10-07 17:32:33
阅读次数:
317
lienhua342014-10-07在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程。但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork 创建的新进程与调用进程之间的关系、父子进程的数据共享问题等。fork 是否可以无限制的调用?如果不行的...
分类:
其他好文 时间:
2014-10-07 03:42:02
阅读次数:
314
lienhua342014-10-051 进程控制三部曲概述UNIX 系统提供了 fork、exec、exit 和 wait 等基本的进程控制原语。通过这些进程控制原语,我们即可完成对进程创建、执行和终止等基本操作。进程的控制可以划分为三部曲,? 第一部:fork 创建新进程。? 第二部:exec ...
分类:
其他好文 时间:
2014-10-05 22:34:29
阅读次数:
342
lienhua342014-10-051 main 函数是如何被调用的?在编译 C 程序时,C 编译器调用链接器在生成的目标可执行程序文件中,设置一个特殊的启动例程为程序的起始地址。当内核执行 C 程序时,在调用 main 前先调用这个特殊的启动例程,该启动例程从内核取得命令行参数和环境变量值。2 ...
分类:
其他好文 时间:
2014-10-05 16:29:08
阅读次数:
266
lienhua342014-10-031 环境表和环境指针在每个进程启动时,都会接到一张环境表。环境表是一个字符指针数组,其中每个指针包含一个以 null 结束的 C 字符串的地址。全局变量environ 则包含了该指针数组的地址,extern char **environ;例如,图 1 显示了包含...
分类:
其他好文 时间:
2014-10-03 23:16:15
阅读次数:
294
lienhua342014-10-021 进程的终止方式进程的终止方式有 8 种,其中 5 种为正常终止,它们是1. 从 main 返回。2. 调用 exit。3. 调用_exit 或_Exit。4. 最后一个线程从其启动例程返回。5. 最后一个线程调用pthread_exit。另外三种为异常终止方...
分类:
其他好文 时间:
2014-10-02 23:13:13
阅读次数:
243
lienhua342014-10-01ISO C 标准 I/O 库提供了个两个函数 tmpnam 和 tmpfile 以帮助创建临时文件,#include char *tmpnam(char *ptr);返回值:指向唯一路径名的指针tmpnam 函数产生一个与现有文件名不同的一个有效路径名字符串。每...
分类:
其他好文 时间:
2014-10-01 17:05:01
阅读次数:
150
lienhua342014-09-291 标准 I/O 流之前学习的都是不带缓冲的 I/O 操作函数,直接针对文件描述符的,每调用一次函数可能都会触发一次系统调用,单次调用可能比较快捷。但是,对于需要频繁进行 I/O 操作的程序,频繁触发系统调用产生的消耗太大。标准 I/O 库提供了带缓冲的 I/O...
分类:
其他好文 时间:
2014-10-01 13:56:41
阅读次数:
206
lienhua342014-09-181 引言在 UNIX 系统中,目录是一种特殊的文件类型。我们可以使用 open 函数来打开目录,获取文件描述符,然后调用 stat 函数来获取目录的属性信息,但是我们却不能够使用 read 函数来读取目录内容。例如,下面例子所示,#include #includ...
分类:
其他好文 时间:
2014-09-19 22:17:06
阅读次数:
281