第七章 高级环境


第七章 高级环境 7.2 main函数 C程序总是从main函数开始执行的。main函数的原型是: int main(int argc, char *argv[]); 其中,argc是命令行参数的数目,argv是指向参数的各个指针所构成的数组。 当内核执行C程序的时候(使用一个exec函数),在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址-- 这是由连接编辑器设置的,而连接编辑器则是由C编译器调用的。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。   7.3进程终止 有8种方式使进程终止。其中5种为正常终止,依次是:
  • 从main函数返回
  • 调用exit
  • 调用_exit或_Exit
  • 最后一个线程从期启动例程返回
  • 从最后一个线程调用pthread_exit
异常终止有3种,依次为:
  • 调用abort
  • 接到一个信号
  • 最后一个线程对取消请求做出响应
  7.3.1 退出函数 3个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理,然后返回内核。 #include void exit(int status); void _Exit(int status); #include void _exit(int status); //exit函数总是执行一个标准I/O库的清理关闭操作:对所有打开流调用fclose函数。 3个退出函数都带一个整型参数,称为终止状态。如果 调用这些函数时不带参数 或 main执行了一个无返回值的return语句 或 main没有声明返回类型为整型 则该进程的终止状态为未定义的。但是,若main返回类型是整型,并且main执行到最后一条语句时返回,则该进程的终止状态是0; main函数返回一个整型值与用该值调用exit是等价的。于是在main函数中exit(0)等价于return(0); 7.3.2 atexit 按照ISO C的规定,一个进程可以登记多至32个函数,这些函数将由exit自动调用。我们称这些函数为终止处理程序,并调用atexit函数来登记这些函数。 #include int atexit(void (*func)(void)); 也就是说通过atexit函数登记若干函数,在程序退出时会自动调用被登记的函数。