第一章Linux下C编程基础
对于本章的读者,我们认为有一定的C语言编写基础,所以在此就不介绍C语言的一些基本知识了。这里我们重点介绍一下如何在Linux环境中编写C程序。
1.1 源代码编辑器VI的使用
原则上任何文本编辑器均可以编写C语言源代码,但在Linux下我还是推荐使用Vi进行源代码的编写。虽然对于初学者可能稍微有些困难,但是熟练掌握Vi的使用对于Linux用户来讲非常重要。
任何一台安装了Linux的计算机都会提供Vi软件,Vi有三种操作状态:命令模式、插入模式和末行命令模式,它们间的切换方式如图1-1:
图1-1:Vi三种模式之间的切换
1.1.1 快速入门
下面首先通过一个非常简单的例子让大家对Vi的使用有个大体的认识。本例子是编写一个C语言源文件HelloWorld.c。
1:在提示符启动Vi,编辑HelloWorld.c文件:
#Vi HelloWorld.c
2:接着进入Vi命令模式的主界面,如图1-2所示:
图1-2 VI的主界面
3:此时按A键进入插入模式,注意界面最左下面一行的提示信息变成了――插入――。
4:接下来输入我们的源代码,方法和任何文本编辑器一样。编辑好的HelloWorld.c文件如图1-3所示,可以发现Vi自动将一些关键字涂上了不同的颜色。
图1-3 输入源文件代码
5:编辑好源文件后,就需要保存它。首先按Esc键,从插入模式退回命令模式,接着按 :键进入末行模式,此时输入wq并按回车,则存盘并保存。
1.1.2 Vi的常用命令
1:命令模式的常用命令
命令
说明
x
删除光标后的字符
dd
删除光标所在行
ndd
删除包括光标所在行的n行文本
u
恢复刚才被修改的文本
Y
复制当前行到编辑缓冲区
nY
复制当前行开始的n行到编辑缓冲区
p
将编辑缓冲区中的内容粘贴到光标后的一行
L
移至窗口的最后一行
G
移至该文件的最后一行
nG
移至该文件的第n行
Ctrl+f
向后翻一页
Ctrl+b
向前翻一页
2:插入模式的常用命令
命令
说明
a
从光标所在位置后面开始新增文本
A
从光标所在行最后面的地方开始新增文本
i
从光标所在位置前面开始插入文本
I
从光标所在列的第一个非空白字前面开始插入文本
O
在光标所在列下新增一行并进入输入模式
O
在光标所在列上方新增一行并进入输入模式
3:末行命令模式的常用命令
命令
说明
:q
结束编辑
:w
存盘
:q!
强制离开VI,放弃存盘
:wq
存盘并退出
/exp
往前查找字符串exp
?exp
往后查找字符串exp
1.2 C语言编译器gcc的使用
Linux系统上运行的GNU C编译器(GCC)是一个全功能的ANSI C兼容编译器,虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。
1.2.1使用 gcc
通常后跟一些选项和文件名来使用 GCC 编译器. gcc 命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的操作将在命令行上每个给出的文件上执行. 下一小节将叙述一些你会最常用到的选项.
下面举个简单的例子,编译我们上一节编写的HelloWorld.c源文件:
#gcc –o HelloWorld HelloWorld.c
此时会在原目录下看到生成了可执行文件HelloWorld,要看到程序输出结果,则只要输入./HelloWorld即可。
1.2.2 gcc 选项
GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:
gcc -p -g test.c
gcc -pg test.c
第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉 GCC 为 gprof 命令建立剖析信息.
当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为 a.out 的可执行文件. 例如, 下面的命令将在当前目录下产生一个叫 a.out 的文件:
gcc test.c
你能用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out. 例如, 将一个叫 count.c 的 C 程序编译为名叫 count 的可执行文件, 你将输入下面的命令:
gcc -o count count.c
1.2.3 常用选项含义:
-c GCC仅把源文件编译为目标代码。
-static 链接静态库,即执行静态链接。
-O GCC对源代码进行基本优化。这些优化在大多数情况下都会使程序执行得更快。
-On 指定代码优化的级别为n,n为{0,1,2,3}中的一个。如-O2选项告诉GCC产生尽可能小和尽可能快的代码。
-g 在可执行程序中包含标准调试信息。
-pedantic 允许发出ANSI/ISO C标准所列出的所有警告。
-wall 允许发出GCC所提供的所有有用的警告。
-MM 输出一个make兼容的相关列表。
-v 显示编译过程中的每一步用到的命令。
-L 指定所用函数库的路径。如果我们所用到的函数库是系统默认的函数库,则不需要指定路径系统的默认的三个函数库是/lib;/usr/lib;/usr/local/lib。如果我们使用的函数不在这默认库中,就要用到-L选项了。
例如:
#gcc –o mytest mytest.c –L /home/zsb/lib
以上仅仅是一些常用的选项含义,其他一些选项,如内核模块编译时用到的GCC选项,我们将在以后的章节用到它们时再详细介绍。
http://blog.chinaunix.net/u/26619/showart_216071.html
第一章Linux下C编程基础
对于本章的读者,我们认为有一定的C语言编写基础,所以在此就不介绍C语言的一些基本知识了。这里我们重点介绍一下如何在Linux环境中编写C程序。
1.1 源代码编辑器VI的使用
原则上任何文本编辑器均可以编写C语言源代码,但在Linux下我还是推荐使用Vi进行源代码的编写。虽然对于初学者可能稍微有些困难,但是熟练掌握Vi的使用对于Linux用户来讲非常重要。
任何一台安装了Linux的计算机都会提供Vi软件,Vi有三种操作状态:命令模式、插入模式和末行命令模式,它们间的切换方式如图1-1:
图1-1:Vi三种模式之间的切换
1.1.1 快速入门
下面首先通过一个非常简单的例子让大家对Vi的使用有个大体的认识。本例子是编写一个C语言源文件HelloWorld.c。
1:在提示符启动Vi,编辑HelloWorld.c文件:
#Vi HelloWorld.c
2:接着进入Vi命令模式的主界面,如图1-2所示:
图1-2 VI的主界面
3:此时按A键进入插入模式,注意界面最左下面一行的提示信息变成了――插入――。
4:接下来输入我们的源代码,方法和任何文本编辑器一样。编辑好的HelloWorld.c文件如图1-3所示,可以发现Vi自动将一些关键字涂上了不同的颜色。
图1-3 输入源文件代码
5:编辑好源文件后,就需要保存它。首先按Esc键,从插入模式退回命令模式,接着按 :键进入末行模式,此时输入wq并按回车,则存盘并保存。
1.1.2 Vi的常用命令
1:命令模式的常用命令
命令 | 说明 |
x | 删除光标后的字符 |
dd | 删除光标所在行 |
ndd | 删除包括光标所在行的n行文本 |
u | 恢复刚才被修改的文本 |
Y | 复制当前行到编辑缓冲区 |
nY | 复制当前行开始的n行到编辑缓冲区 |
p | 将编辑缓冲区中的内容粘贴到光标后的一行 |
L | 移至窗口的最后一行 |
G | 移至该文件的最后一行 |
nG | 移至该文件的第n行 |
Ctrl+f | 向后翻一页 |
Ctrl+b | 向前翻一页 |
2:插入模式的常用命令
命令 | 说明 |
a | 从光标所在位置后面开始新增文本 |
A | 从光标所在行最后面的地方开始新增文本 |
i | 从光标所在位置前面开始插入文本 |
I | 从光标所在列的第一个非空白字前面开始插入文本 |
O | 在光标所在列下新增一行并进入输入模式 |
O | 在光标所在列上方新增一行并进入输入模式 |
3:末行命令模式的常用命令
命令 | 说明 |
:q | 结束编辑 |
:w | 存盘 |
:q! | 强制离开VI,放弃存盘 |
:wq | 存盘并退出 |
/exp | 往前查找字符串exp |
?exp | 往后查找字符串exp |
1.2 C语言编译器gcc的使用
Linux系统上运行的GNU C编译器(GCC)是一个全功能的ANSI C兼容编译器,虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。
1.2.1使用 gcc
通常后跟一些选项和文件名来使用 GCC 编译器. gcc 命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的操作将在命令行上每个给出的文件上执行. 下一小节将叙述一些你会最常用到的选项.
下面举个简单的例子,编译我们上一节编写的HelloWorld.c源文件:
#gcc –o HelloWorld HelloWorld.c
此时会在原目录下看到生成了可执行文件HelloWorld,要看到程序输出结果,则只要输入./HelloWorld即可。
1.2.2 gcc 选项
GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:
gcc -p -g test.c
gcc -pg test.c
第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉 GCC 为 gprof 命令建立剖析信息.
当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为 a.out 的可执行文件. 例如, 下面的命令将在当前目录下产生一个叫 a.out 的文件:
gcc test.c
你能用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out. 例如, 将一个叫 count.c 的 C 程序编译为名叫 count 的可执行文件, 你将输入下面的命令:
gcc -o count count.c
1.2.3 常用选项含义:
-c GCC仅把源文件编译为目标代码。
-static 链接静态库,即执行静态链接。
-O GCC对源代码进行基本优化。这些优化在大多数情况下都会使程序执行得更快。
-On 指定代码优化的级别为n,n为{0,1,2,3}中的一个。如-O2选项告诉GCC产生尽可能小和尽可能快的代码。
-g 在可执行程序中包含标准调试信息。
-pedantic 允许发出ANSI/ISO C标准所列出的所有警告。
-wall 允许发出GCC所提供的所有有用的警告。
-MM 输出一个make兼容的相关列表。
-v 显示编译过程中的每一步用到的命令。
-L 指定所用函数库的路径。如果我们所用到的函数库是系统默认的函数库,则不需要指定路径系统的默认的三个函数库是/lib;/usr/lib;/usr/local/lib。如果我们使用的函数不在这默认库中,就要用到-L选项了。
例如:
#gcc –o mytest mytest.c –L /home/zsb/lib
以上仅仅是一些常用的选项含义,其他一些选项,如内核模块编译时用到的GCC选项,我们将在以后的章节用到它们时再详细介绍。