程序的开始和结束
程序员文章站
2024-01-23 19:57:52
...
1.main函数由谁调用
(1)编译链接时的引导代码:操作系统性在执行main函数前其实也要先执行一段引导代码才能执行main,链接时由连接器将编译器中事先准备好的引导代码给链接进去和我们的应用程序一起构成最终的可执行程序。
gcc -v 要编译的文件
来查看编译链接时里面的内容
(2)运行时的加载器:加载器是操作系统中的程序,当我们执行一个程序时(譬如./a.out,譬如代码中用exec族函数来运行时)加载器负责将这个程序加载到内存中去执行这个程序。
(3)程序在编译时用到链接器,运行时用加载器,这两个东西对程序运行原理非常重要。
(4)argc和argv的传参如何实现
先传送到加载器再到引导代码在传给main
2.程序如何结束
(1)正常终止:return、exit、_exit
(2)非正常终止:自己或他人发信号终止进程
3.atexit注册进程终止处理函数
(1)实验演示
#include <stdio.h>
#include <stdlib.h>
void func1(void)
{
printf("func1\n");
}
void func2(void)
{
printf("func2\n");
}
int main(void)
{
printf("hello world\n");
// int atexit(void (*function)(void));
// 当进程被正常终止时,系统会自动调用这里注册的func1执行
atexit(func1); //先注册的被后执行
atexit(func2); //后注册的被先执行
printf("asdfs\n");
return 0;
}
```![结果展示](https://img-blog.csdnimg.cn/b0aa4282efa744bbaaa25dee43fc2e53.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAd2VpeGluXzU0OTg5NjI2,size_40,color_FFFFFF,t_70,g_se,x_16#pic_center)
(2)return、exit、_exit的区别
return和exit效果一样,都是会执行进程终止处理函数,但是_exit终止进程时并不执行atexit·注册的进程终止处理函数。
上一篇: clock()
推荐阅读
-
程序的开始和结束
-
Pygame的程序开始
-
PHP获取指定月份的第一天开始和最后一天结束的时间戳函数,php最后一天
-
PHP获取一年中每个星期的开始和结束日期的方法,php获取_PHP教程
-
如何使用PHP获取指定日期所在月的开始日期与结束日期_php实例
-
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
-
高通总裁:和苹果之间的iPhone基带争执将在2019年结束
-
为什么大部分的程序员学编程,都会选择从C语言开始?
-
PHP中使用foreach和引用导致程序BUG的问题介绍_PHP教程
-
网站(apache+php)被黑客攻击,被上传了好多 PHP 探针和 web shell 脚本,黑客从什么路径上传的这些文件?不打算去找程序漏洞,怎么解决?