UNIX系统编程 第2章 程序、进程和线程

1 程序是为了完成特定的任务而准备好的一个指令序列。


2 进程是一个正在执行的程序实例。每个实例都有自己的地址空间和执行状态。
   程序转化为进程:操作系统为进程分配进程ID,和进程的执行状态。用这些信息来为进程分配和管理系统资源。

3 程序映像:加载以后,可执行程序看起来占据了一个连续的内存块,这个连续的内存块被称为程序映像。
   程序映像看起来占据了一个连续的内存块,但实际上,操作系统将程序映像映射到不一定连续的物理内存块中。
   通常的映射将程序映像划分为相同大小的片,这些片被称为页。
   操作系统将这些页加载到内存中,当处理器引用某页上的内存时,操作系统会从一个表中查找这一页的物理位置。

4 显示错误的库函数的使用,推荐用strerror。但是strerror调用后可能会改变errno的值。,如果之后还要用errno,则要先保存。
   进程被信号中断时,错误不是由它执行中的问题造成的,而是由外部因素造成的。应该重启这个调用。如下:
//close失败后,用strerror输出信息
int fildes;
if (-1 == close(fildes))
fprintf(stderr, "Failed to close file descriptor %d:  %s/n",fildes, strerror(errno));


//调用strerror前保持errno的值
int fildes;
int error;
if (-1 == close(fildes))
{
   error = errno;
   fprintf(stderr, "Failed to close file descriptor %d:  %s/n",fildes, strerror(errno));
   errno = error;
}

//如果是中断,则重启调用close,直到执行成功或遇到真正的错误为止
int fildes;
int error;
while(((error = close(fildes))==-1)&&(error==EINTR))
    ;
if (-1 == close(fildes))
{
   error = errno;
       fprintf(stderr, "Failed to close file descriptor %d:  %s/n",fildes, strerror(errno));
   errno = error;
}

//重启库的close版本
#include "restart.h"
int fildes;
int error;
while(((error =
 r_close(fildes))== -1))
{
   error = errno;
       fprintf(stderr, "Failed to close file descriptor %d:  %s/n",fildes, strerror(errno));
   errno = error;
}

5 main函数终止。
   使用main中的return语句等价于用相应的状态调用exit。
   执行到main的末尾与调用exit(0)的效果相同
   _Exi和_exit函数在终止控制之前没有调用用户定义的退出处理程序。即打开的流是否被flush或者临时文件是否被删除是未知的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值