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, 对最后一个线程发出的取消请求做出响应。
_exi
相关文档:
Linux下常用 CVS 命令整理
1. 登录 -- login
$ export CVSROOT=:pserver:username@the_server_name:/home/cvsroot
Note:
pserver是访问方式,如果服务器设置的是口令认证,则是 pserver。
username是 CVS服务器的用户名,可以根据你的设置修改;
the_server_name是CVS服务器的名称或者IP地址;
/home/cvsroot ......
目 录
1.1 前言:... 4
1.2 安装及配置步骤:... 4
1.2.1 :安装准备... 4
1.2.2 :安装方式选择... 4
1.2.3 :光盘检测... 5
1.2.4 :欢迎界面... 5
1.2.5 :选择安装过程的语言。... 6
1.2.6 :键盘和鼠标设置... 6
1.2.7 :磁盘分区方式选择... 7
1.2.8 :格式化确认信息... 8
1.2.9 :建分区... 8
1. ......
紫色为更正
一、准备工作
首先需要一台运行Linux操作系统的PC以完成我们的编译工作。
其次要准备如下一些源文件。
1、源文件准备
&nbs ......
mount -t iso9660 /dev/cdrom /mnt/cdrom 挂光驱
mount -t vfat /dev/fd0 /mnt/floppy 挂软驱 (文件内型可以自己选)
mount -t vfat -o rw,utf8,umask=000 /dev/sda1 ......
一、引言
UDP是TCP/IP协议中的传输层协议的一种,本文介绍了在Linux下编写基于UDP协议的Client/Server模型的程序的方法,并给出了一个echo Client/Server例子程序。
二、UDP协议简介
UDP是一种简单 ......