linux下C程序执行过程
来源:互联网 发布:firewallcmd 开放端口 编辑:程序博客网 时间:2024/06/05 09:33
声明:本人正在研读UNIX环境高级编程,相关博文为学习心得,观点可能会有错误,若那位大神发现错误,请留言指正,不胜感激。
main函数和应用程序
在编写C应用时,都是以main()作为入口,这只是代码编辑时的情况。当使用C编译器编译后,编译器会在main()之前链接一段可执行的start-up启动代码。(此段代码由编译器自动链接,我们自己不用编写或修改,个人猜测此start-up代码段与编译器的配置,操作系统相关)。其过程如下图所示,最左侧为我们自己编写的C代码,通过C编译器编译后,生成的应用程序已经不仅仅由main()函数了,还包括启动代码,如果没有此段启动代码,我们编写的main代码将无法被执行。start-up是使用汇编语言编写的,但其功能可以用C代码表示为如下。负责启动一个调用main(),启动main(),当main()返回后,main的返回值作为exit的参数,来处理进程销毁任务。
start-up routine的功能
start-up从kernel中获取用户在打开应用程序,由shell创建一个新进程时,指定的命令行参数和环境列表。shell先调用start-up,shell将环境列表和命令行参数作为参数传递给start-up routine。然后,start-up将根据系统进程的内存布局,将命令行参数和环境列表放在进程内存布局中,相依的位置。
linux下运行a.out
在shell下运行某个编译后的可执行程序a.out,假设a.out是由helloworld.c编译所得。在shell下输入的命令行是:
~>./a.out。由于shell实际是由init创建的终端进程。因此,当在shell下输入~>./a.out时,shell将以./a.out为参数,创建一个新的进程,此进程将以./a.out为代码段来创建。首先执行start-up,然后,再在start-up中调用main()来实现其主要的功能。
- linux下C程序执行过程
- linux下C程序从编写到执行完整过程
- Linux下C语言的执行过程
- linux下,编写和执行一个c程序的完成过程(复习)
- linux下编译执行C程序
- C程序问题归纳(static,auto,register,extern,程序内存分布图,linux下程序的执行过程......)(一)
- C程序问题归纳(static,auto,register,extern,程序内存分布图,linux下程序的执行过程......)(二)
- Linux下C程序编译过程
- linux下c程序的编译过程
- Linux下C程序的链接过程
- C程序编译执行过程
- C 程序编译执行过程
- C程序编译执行过程
- C程序编译执行过程
- C程序编译执行过程
- C程序编译执行过程
- C程序编译执行过程
- C程序编译执行过程
- Linux下的各种解压命令
- leetcode -day28 Unique Binary Search Trees I II
- Linux Shell编程简单介绍
- 利用jms 消息选择器 Message Selectors 过滤消息
- 在奋斗的日子里,傻笑出来
- linux下C程序执行过程
- 软件工程的相关笔记
- Linux 14.04 编译android源码
- 黑马程序员---java基础加强---反射
- [HBase] LSM树 VS B+树
- xtrabackup 备份mysql数据库二 :innobackupex 命令
- jquery easyui 全部图标
- Web基础之HTML
- 介绍一下UML的主要功能及其特点