Linux编程

来源:互联网 发布:下载appstore软件免费 编辑:程序博客网 时间:2024/04/29 10:45

Linux编程
    GNU是一个充满梦想的世界,Linux是一个非常神奇的操作系统.系统应该开放,软件应该自由使用.自由的信念激发无数人的激情,为自由软件事业而奋斗.然而由于在Windows的统治下太长的时间,我们对自由软件,对Linux还非常的陌生.缺少应用软件支持,缺少用户.但这一切都无法阻挡自由软件事业的发展.让我们携起手来,为自由软件同盟而奋斗吧!


    程序是程序员交流的方式.可以在Linux下编写程序,为自由软件事业出一份力,是每一个Linux用户的愿望.我写这份教程的目的也在于此.以下是我的一些假定:
                                                1.读者熟悉C语言;                                                2.读者已经安装了一份Linux操作系统,并且已经正在运行;
3.本教程的所有开发环境均在字符界面完成,并且十分简单,只是一份入门教程;
    让我们开始吧!

vi的使用(edit)
    vi是Unix/Linux下最经典的文本编辑器之一.Linux的用户必须熟悉它.
  vi filename // 打开/创建一个文件(如果文件不存在的话)
    这样,就进入了vi的界面了.理解vi的关键是理解vi的两种模式:编辑模式和命令模式.一开始进入的就是命令模式.在命令模式下,可以使用一些命令,如保存,退出等.在编辑模式下,可以对文挡进行编辑,修改.
在任何时候,按ESC键,将进入命令模式.在命令模式下,按a(append),i(insert)可以进入编辑模式.一般的使用i即可.在命令模式下,按':',再在:后输入wq(write and quit),就可以存盘退出了.如果不想存盘,则在:后输入q!(强行退出).在命令模式下,直接shift+ZZ,也可以直接存盘退出,而省去了输入:的麻烦.
    下面是一个完整的创建C语言代码的完整的例子.
  vi hello.c
  // 命令模式,按i键进入编辑模式
  // 输入一个测试代码
  // 按ESC进入命令模式
  // 存盘的两种方式:
  A: 输入:+wq
  B: shift+ZZ
  // 放弃存盘的方式(本次编辑修改的内容无效)
  输入:+q!

gcc的使用(?)
    gcc是GNU的拳头产品.世界上威力强大的C语言编译器.如果你熟悉命令行编译的话,这个工具非常适合你.在Windows下也有它的一个版本.
    在介绍gcc的使用之前,让我们先回顾一下C语言的编译过程:
  hello.c(编译)->hello.o(连接)->hello//linux
  hello.c(编译)->hello.obj(连接)->hello.exe//windows
    在前面的例子中,我门已经有了一个C语言源程序,hello.c,下面我们将它编译连接成可执行文件
  gcc -o hello.c// 结果:我们得到一个以默认名称命名的可执行文件a.out
  gcc hello.c -c hello.o// -c选项代表编译,结果为目标代码hello.o
  gcc hello.o -o hello// -o选项代表连接,结果为可执行文件hello(无后缀名)
  gcc hello.c -o hello// 常规用法,一步到位,直接得到可执行文件
    Linux里,当前目录下的可执行文件和系统命令是有严格区分的.你想执行一个系统命令,如拷贝命令cp,直接输入cp回车就可以了;如果想运行当前目录下的一个可执行文件hello,则需要输入./hello,才行.这也是Linux的安全措施之一吧.

gdb的使用(debug)
    gdb是Linux下一个常用的调试工具.要想使用它对程序进行调试,在编译的时候注意要加上选项 -g,
gcc -g hello.c -o hello.这样得到的可执行文件中就加入了调试信息,通常文件也会变得很大.下面是它的用法:
  gdb hello// 调试hello
  gdb break main// break,设置断点,此处断点设在程序的开头,main函数的入口处
  gdb r// 开始运行程序,在断点处停止,本处为程序的开始
  gdb s// step,开始单步调试程序了,同时会打印出此处程序的源代码
  gdb print var// 打印变量的当前值,程序不会向前执行,var为变量名
  gdb r或者gdb q// 错误排除,让程序直接运行结束或直接退出.(gdb r运行完也不会退出gdb,请再输入一个q)

makefile的使用(?)
    makefile是用于多源代码文件项目管理的.举例说明,一个可执行文件abc由a.o,b.o,c.o连接而成;而a.o由a1.c,a2.c,a3.c编译而成,b.o由b1.c,b2.c,b3.c编译而成,c.o由c1.c,c2.c,c3.c编译而成.够复杂的.我们需要
  gcc a1.c a2.c a3.c -c a.o
  gcc b1.c b2.c b3.c -c b.o
  gcc c1.c c2.c c3.c -c c.o
  gcc a.o b.o c.o -o abc
    如果仅仅一个源文件a1.c发生变化,我们必须重新编译其它没有发生变化的程序,做无用功.这里的例子仍然很小,如果是一个有数百个源代码组成的工程,简化编译过程将十分必要.makefile由此而生.
    makefile由依赖关系和编译命令组成.依赖关系的写法是
    目标 : 依赖的文件1,依赖的文件2,依赖的文件3...
    编译命令直接写在依赖关系的下一行,注意,以一个tab退格键开头,四个空格不行
    我们以上面的例子写一个makefile文件.(makefile的默认文件名就是makefile,无后缀名)
  vi Makefile
  abc : a.o b.o c.o
 gcc a.o b.o c.o -o abc
  a.o : a1.c a2.c a3.c
 gcc a1.c a2.c a3.c -c a.o
  b.o : b1.c b2.c b3.c
 gcc b1.c b2.c b3.c -c b.o
c.o : c1.c c2.c c3.c
 gcc c1.c c2.c c3.c -c c.o
  执行makefile,系统就会根据源文件的最后修改时间决定,那些需要重新编译,而哪些不要.