红联Linux门户
Linux帮助

走进Linux编程的大门

发布时间:2006-07-24 18:06:23来源:红联作者:bear10214
走进Linux编程的大门

随着Linux的不断普及,使用Linux的人也越来越多了。然而在Linux中如何进行程序设计,用什么样的开发工具好呢?本文就以我初学Linux编程的一点心得体会,和大家共同探讨有关Linux编程的问题。

  Linux作为一个遵循GNU的操作系统,其源代码开放性已成为其最大的特点,我们可以方便地得到Linux系统及其应用软件的源代码。Linux编程也就是在这样的环境下对程序进行编写或修改工作的,学会了Linux编程,不但可以自己编写一些共享的小程序供大家使用,也可以对现有的软件进行一点修改,让它们更适合自己的口味。

  Linux下编程的工具很多,不同发行版本的Linux也提供了不同的开发工具,但是通常情况下都提供了在控制台终端下的C语言编译程序GCC。我们只要建立一个C语言源程序文件,比如hello.c,然后在终端下运行:gcc hello.c,系统便会自动对程序进行编译,如果没有出错的话,在当前目录生成a.out文件,否则显示出错提示。生成a.out后,我们只需在其所在目录键入 ./a.out就可以运行这个程序了。但是这样的文本命令方式的开发工作实在很不方便,所以现在许多发行版本的Linux都在X-Windows的图形界面下提供了集成开发环境,比如蓝点Linux的Kdevelop等等。这些集成环境不但为我们提供了一个良好的编程界面,也为编程工作提供了极大的方便。

  首次运行Kdevelop时系统会自动运行它的设置安装程序,这个程序将验证Kdevelop所必须的文件是否齐全,通过设置后就可以使用了。Kdevelop为我们在Linux下展现了一个类似于Visual C++的集成开发环境。在这个环境的左半边有CV、LFV、RFV等几个标签,分别表示了类列表、逻辑文件列表和实际文件列表,里面包含了整个工程所有的类和文件的概貌。开发环境的右半边则是文档显示区,用于显示源程序或帮助信息。
[attach]831[/attach]

  下面我们就一起来使用Kdevelop开发两个小程序,试试Linux编程的感觉!

  我们先来尝试用它制作一个最简单最经典的“Hello world!”程序,它是在Linux的文本界面即终端中运行的,如同在初学C语言时开发的第一个程序----在DOS下运行的“Hello world!”一样。

  先打开“项目”菜单,选择“新建…”,在弹出的Application Wizard中选择“终端程序-C程序”并单击“下一页”。
[attach]832[/attach]

  在向导的第二页中输入项目的名称等信息,然后把“生成源文件和头文件”前的勾去掉。
[attach]833[/attach]

  如果不这样做的话,Application Wizard会自动生成一些源代码,碰巧还正是我们要做的“Hello world”程序,但我们为了说明问题,就不图这个方便了,一切自己做。最后单击“生成”按钮,等屏幕出现“Ready“信息后单击“退出” 按钮,我们的项目便生成了。

  接着我们就得输入源程序了。选择文件菜单中的“新建”命令,新建一个“C/C++程序”(我们的例子是C程序),系统自动按照Application Wizard中选定的文件头模板生成一个空文件。现在输入下面这段“经典”的程序,输入时一定要注意大小写。


QUOTE:
#include
main()
{
printf("Hello world!\n");
}
  然后选择菜单或工具条中的“运行”命令。经过一段时间的编译,终端中就会输出“Hello world!”这句话。
[attach]834[/attach]

  别看这个程序很简单,它确确实实是我们在Linux环境下做的第一个程序呀!Linux下的C和ANSI C完全兼容,对于学过C程序设计的朋友不能不说是个好消息。现在你是不是已对Linux编程产生了很大的兴趣呢?

  不过这个程序未免太简单了,能不能做一个在X-Window下运行的图形程序呢?做这样的程序很困难吗?别急,下面跟我一起来试一试。

  要编写图形程序,一个优秀的开发包是必不可少的。如同在VC++中的MFC类库,Kdevelop为Linux下编程提供了功能强大的Qt库和KDE库,用它们可以方便地编写X-Window下的KDE图形界面程序。除此之外,Kdevelop还提供了“对话框编辑器”等一系列实用工具,使得开发更方便。现在我们一起来开发一个X-Window下的图形版“Hello world”程序。我们选择使用比较简单的Qt库来写程序,一起来体验一下这个强大而又易用的开发包。

  第一步还是建立工程文件,方法和前面建立终端程序的工程文件类似,不同的是在Application Wizard的第一步中要选择“Qt程序-普通”。同样为了说明问题,在Wizard的第二步中,我们也把“生成源文件和头文件”前的勾去掉,我们自己来写程序。工程文件建好后,同样新建一个C/C++程序,并输入下面的源程序:


QUOTE:
#include
#include
int main( int argc, char **argv )
{
Qapplication a( argc, argv );
QPushButton hello( "Hello world!" );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}
  与前面的C程序相比,这个程序的确复杂得多,我们一行行进行分析。程序前两行调用了两个头文件,其中qapplication.h是建立一个Qt程序所需的最基本的库,任何Qt程序都要用到它。由于我们打算用一个按钮来显示“Hello world!”的文字,所以还要包含qpushbutton.h这个头文件。主程序第一句建立了一个名为a的Qt程序,并把命令行参数传递给它。第二行建立了一个名为hello的按钮,它的标题为“Hello world!”,这就实现了我们要在屏幕上显示“Hello world!”文字的愿望。第三行使用PushButton的resize方法改变了这个hello按钮的大小。第四行设置了a程序的主控件为这个hello按钮(Widget这个词可以翻译为控件)。由于在Qt库做程序时,新建控件默认是不显示的,所以在第五行要用show方法把hello按钮显示出来。程序最后一行返回了a程序的运行返回值。这么一解释,这个程序也就显得不是很困难了。怎么样,与VC++中的MFC类库相比,Qt库有过之而无不及吧?

  下面我们就可以运行程序了,单击工具栏上的“运行”按钮,通过编译就可以了。程序运行后,屏幕上将出现一个小窗口,里面有一个“Hello world!”按钮(如图5),并且这个窗口还可以移动、改变大小等等。不过这时“Hello world!”这个按钮还没有作用,点击它不会有任何效果。如何给Hello world编写一个事件响应的函数呢? 比如我们想让“Hello world”按钮被点击后程序结束运行,该如何做呢?

  在Qt库中,消息的响应是通过connect函数实现的。所以,我们只要在源程序中“a.setMainWidget(&hello)”前加上一行:”Qobject::connect( &hello, SIGNAL(clicked()), &a, SLOT(quit()) );”就可以了。这一行的意思就是把hello按钮的clicked事件与a程序的quit()函数连接起来。至此,相信你对Linux的编程已经有了一个感性的认识,是不是很有意思呢?

  另外,Kdevelop不但为我们提供了强大的开发环境,还给我们提供了详细的文档资料,包括“编程手册”、“KDE库”、“Qt库”等一系列文档。“Qt库”文档中还包含了一个14步教程,从头讲述Qt程序的设计方法,最后一讲与我们一起完成了一个完整的游戏程序,这可是Linux编程入门难得的好教材。
文章评论

共有 37 条评论

  1. 59.25.9.* 于 2007-07-19 06:02:17发表:

    http://www.ringtones-rate.com/mp3/ ringtones site free. Free nokia ringtones here, Download ringtones FREE, Best free samsung ringtones. from website .

  2. 194.88.214.* 于 2007-07-19 06:02:12发表:

    http://www.ringtones-rate.com/mp3/ ringtones site free. qwest ringtones: Free nokia ringtones here, Download ringtones FREE, Best free samsung ringtones. nextel ringtones from website .

  3. 194.88.214.* 于 2007-07-19 06:01:54发表:

    http://www.ringtones-rate.com/tones/ real ringtones. motorola ringtones: Free nokia ringtones here, Download ringtones FREE, Best free samsung ringtones. http://www.ringtones-rate.com/ring/ [link=http://www.ringtones-rate.com]tracfone ringtones[/link] from site .

  4. 194.88.214.* 于 2007-07-19 06:01:09发表:

    http://www.ringtones-rate.com/tones/ real ringtones. motorola ringtones: Free nokia ringtones here, Download ringtones FREE, Best free samsung ringtones. http://www.ringtones-rate.com/ring/ [link=http://www.ringtones-rate.com]tracfone ringtones[/link] from site .

  5. Emperor 于 2006-12-23 10:30:07发表:

    感谢楼主

  6. xkx 于 2006-12-21 20:20:19发表:

    :0(1

  7. aharock 于 2006-12-19 00:08:31发表:

    可是哪里能下载到这个kdev呢?

  8. WangHuipeng 于 2006-12-13 11:36:56发表:

    方法好像跟MFC的编程差不多,不过这些类库的手册有没有介绍?

  9. cxqcxq0177 于 2006-12-12 10:03:43发表:

    不错,由浅入深阿

  10. spacesky 于 2006-11-28 15:33:41发表:

    SHELL编程和C语言有什么不同啊

  11. astronomy 于 2006-11-28 15:09:26发表:

    又学习了

  12. lz307 于 2006-11-28 10:31:12发表:

    谢谢

  13. resky 于 2006-11-27 21:08:27发表:

    xiexie

  14. lovefengzi 于 2006-11-21 11:24:17发表:

    thanks

  15. guixiaolan 于 2006-11-18 15:12:00发表:

    唉,GCC都不会用,可怜啊!

  16. dangzhiming 于 2006-11-18 00:42:13发表:

    学习下,这个还得系统的学阿

  17. chunyu 于 2006-11-16 16:21:17发表:

    还没有用过Kdevelop,现在就试试

  18. athlonxpgzw 于 2006-11-14 19:29:06发表:

    顶了先

  19. davidpike 于 2006-10-23 15:03:09发表:

    不断的学习中

  20. xyx119 于 2006-10-23 10:09:30发表:

    学习

  21. syy520 于 2006-10-22 11:09:36发表:

    :0L

  22. 2410linux 于 2006-10-13 18:08:46发表:

    hao

  23. daowangooo 于 2006-10-13 11:55:59发表:

    :0L

  24. chameleon 于 2006-10-10 00:35:08发表:

    我也期盼着能进这座大门啊...

  25. zhangchegn 于 2006-10-08 10:38:51发表:

    :0L

  26. yjdwbj 于 2006-10-04 22:20:56发表:

    好,一定认真学习

  27. liu62395 于 2006-10-04 20:14:55发表:

    好!学习了

  28. yorktown 于 2006-10-03 20:57:18发表:

    还所不怎么 明白

  29. blueeyes1004 于 2006-09-05 09:28:49发表:

    好!

  30. perry001 于 2006-07-31 08:56:13发表:

    hao

  31. voff12 于 2006-07-29 17:30:47发表:

    强烈支持

  32. yiue2 于 2006-07-28 17:27:10发表:

    支持

  33. jinge 于 2006-07-27 08:50:42发表:

    真强!!

  34. johnhoo 于 2006-07-26 13:59:49发表:

    linux!

  35. qzmkyo 于 2006-07-26 10:11:14发表:

    好,谢谢分享

  36. 154978 于 2006-07-25 15:34:43发表:

    我很赞同

  37. dsfaaaaa 于 2006-07-25 12:27:22发表:

    hao