易截截图软件、单文件、免安装、纯绿色、仅160KB

GNU/Linux平台的C程序开发及程序运行环境

本文介绍在GNU/Linux环境下一个C程序由源代码到程序,到加载运行,最后终止的过程。同时以此过程为载体,介绍GNU/Linux平台下软件开发工具的使用。
 
本文以我们最常见的hello, world!为例:
 
#include <stdio.h>
main ()
{
      printf(“hello, world!\n”);
}
 
   
C程序生成
 
下图是一个由C源代码转化为可执行文件的过程:
 
代码编辑: 比较流行的编辑器是GNU Emacs和vim。Emacs具有非常强大的功能,并且可扩展。
 
编译:包括编译预处理,编译,汇编,连接过程。它们都可以通过GCC来实现。关于GCC,可以参考我关于GCC的笔记。
 
C编译器将源文件转换为目标文件,如果有多个目标文件,编译器还将它们与所需的库相连接,生成可执行模块。当程序执行时,操作系统将可执行模块拷贝到内存中的程序映象。
程序又是如何执行的呢?执行中的程序称之为进程。程序转化为进程的步骤如下:
1,  内核将程序读入内存,为程序镜像分配内存空间。
2,  内核为该进程分配进程标志符(PID)。
3,  内核为该进程保存PID及相应的进程状态信息。
经过上述步骤,程序转变为进程,即可以被调度执行。
 
上述的hello, world程序实际是不规范的,POSIX规定main函数的原型为:
 
int main( int argc, char *argv[])
 
argc是命令行参数的个数,argv是一个指针数组,每个指针元素指向一个命令行参数。
 
 
 
e.g:  $ ./a.out arg1 arg2
argc = 4
argv[0] = ./a.out   argv[1] = arg1  argv[2] = arg2
 
 C程序的开始及终止
 
   
程序的运行:
唯一入口:exec函数族(包括execl, execv, execle, execve, execlp, execvp)
程序开始执行时,在调用main函数之前会运行C启动例程,该例程将命令行参数和环境变量从内核传递到main函数。
 
程序的终止:有8种途径:
正常终止:
1,    从main返回。
2,    调用exit。
3,    调用_exit或_Exit。
4,    从最后一个线程的开始例程返回。
异常终止:
5,    调用abort。
6,    接收到一个终止信号。
7,    对最后一个线程发出的取消请求做出响应


相关文档:

Linux入门笔记七

文件系统
文件系统的操作观点
--操作系统用于明确磁盘分区上的文件的方法和数据结构,即文件在磁盘上的组织方法
--Linux使用"虚拟文件系统"操作各种类型的文件系统
文件系统的用户观点
--Liunx下的所有文件和目录,这些文件及目录构以一个树状的结构,构成了Linux中的文件系统
--Linux文件标准(Linux File System St ......

U盘上的移动linux环境cgywin

还不是太会用这个cgywin.
------------------------------------------
U盘上的移动linux环境(cygwin篇)
虽然在自己的本本上装好了ubuntu,但是在单位的机子上工作时,还是用的windows,无法使用强大的SHELL。于是就,想起了cygwin了。但是,我总不能给每一台机器装cygwin吧。于是乎,就产生把cygwin装进U盘的想法。自 ......

Linux 文件特殊权限 Sticky Bit

http://content.hccfl.edu/pollock/AUnix1/FilePermissions.htm 
http://en.wikipedia.org/wiki/Sticky_bit
http://www.anqn.com/os/linux/2009-03-01/a09108173.shtml
7.4.3  文件特殊权限:SUID/SGID/Sticky Bit
前面一直提到文件的重要权限,就是rwx这3个读、写、执行的权限。但是,怎么 /tmp权限有些奇怪 ......

Linux 共享库: LD_LIBRARY_PATH 与ld.so.conf

Linux 运行的时候,是如何管理共享库(*.so)的?在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。
但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢?
目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf,然后运行 ldconf ......

GNU/Linux平台的C程序开发及程序运行环境

本文介绍在GNU/Linux环境下一个C程序由源代码到程序,到加载运行,最后终止的过程。同时以此过程为载体,介绍GNU/Linux平台下软件开发工具的使用。
 
本文以我们最常见的hello, world!为例:
 
#include <stdio.h>
main ()
{
      printf(“hello, world!\n” ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号