Unix和Linux下C语言学习指南

作者&投稿:粱全 (若有异议请与网页底部的电邮联系)
~ 尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。
本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的。希望对您的学习和工作有所帮助。您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些。
本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX 下C语言编程学习经验;也不说明一个合格的编程人员应该掌握的计算机知识,比如:操作系统、数据结构与算法、数据库等等。
不管您出于什么目的,希望您阅读完本文后能留下您的批评或建议。您的中肯的批评会成为作者前进的动力。
工具篇
“公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。
(一) 操作系统
在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统。
目前可供个人免费使用的UNIX或Linux系统有FreeBSD、RedHat Linux、SUSE Linux等,而且在安装包中还提供很多实用的工具,如:gcc, make等。
如果您一直使用Windows,身边又没有多余的机器安装UNIX,则可以使用VMware,通过VMware安装虚拟系统。
(二) 编译工具
目前绝大多数Unix或Lnux系统都提供CC或GCC编译器,最简单的cc命令格式如下:
cc -o hello hello.c
在unix shell环境中敲入上面的代码会将hello.c程序编译成可执行文件hello。
make 工具如 GNU make、System V make 和 Berkeley make 是用来组织应用程序编译过程的基本工具,但是每个 make 工具之间又有所不同。
大部分UNIX和Linux程序都是通过运行make来编译的。make工具会读取一个包含指令的文件(这个文件的名字通常都是 makefile 或 Makefile,不过后文中我们统一称之为 “makefile”),并执行各种操作来编译程序
(三) 调试工具
最简单的调试工具:为你的程序添加打印语句
在你对程序的运行机制有了一定的了解后,你可以实用一些工具帮助你进行调试,当然你得学习一下这些工具得使用,如:dbx,gdb等。
还有一些内存工具可以帮你查找内存泄漏或缓冲区溢出等一些问题,如:memwatch,yamd等
(四) 其他工具
1.vi或vim
Unix下文本编辑器。主要靠一堆命令来编辑文本文件,学Unix编程最好熟悉并熟练使用vi编辑器。
当然在实际工作中,你可能需要一个集成编码环境或一个功能强大的图形化编辑工具。
提供一个中文的vim在线手册:http://vcd.gro.clinux.org/
2.netterm
最着名的网络终端软件之一,可以使用它方便的连接到主机系统中。
3.Secure shell
一个支持ssh协议得客户端工具,多数情况下用来连接linux系统。
书籍篇
“书是人类进步得阶梯”。学习一门新的知识,当然要选择几本适合自己得书籍,下面介绍一些我自己学习C语言使用过的书籍:
1.《C primer plus》
推荐理由:适合作为入门书和基本函数查询得参考资料。本书最新版为第五版,以ANSI C99为标准详细介绍了C语言。
2.《The C programming_Language》
推荐理由:C语言之父得作品权威性毋庸置疑。虽然书籍出版时间比较老,好像也没更新,不过仍不失为经典书籍,网上有这本书得英文电子版提供下载。
3.《C 专家编程》
推荐理由:本书可以帮助有一定经验的C程序员成为C编程方面的专家,最关键的是本书寓教于乐,让你充分享受编程的乐趣。
4.《C缺陷与陷阱》
推荐理由:书中所揭示的知识能帮助您绕过C语言自身得陷阱和缺陷,减少代码中许多常见的Bug。
5.《unix环境高级编程》
推荐理由:既然是UNIX环境下C编程,过程篇
1. 学习C语法
语法的学习对于一个具有编程底子的来说,就很轻松了;即使你以前没有学习过其他编程语言,我相信有2个星期,你也能轻松搞定。
需要注意的是,不要太纠缠于语言的细节,比如:运算符优先级与结合性的问题等。
2. 学习C标准库
ANSI C库把函数分为不同的组,每个组都具有与之相关的头文件。C语言标准库相对于其他语言,比如C++,Java来说是非常短小精悍的,但首先应着重对以下库进行学习:
ctype.h:字符处理
math.h:数学库
stdio.h:标准I/O库
stdlib.h:通用工具库
string.h:字符串处理
time.h:时间和日期
如果想了解完成的ANSI C库,你可以购买相关的书籍,这些书籍一般会详细介绍每个函数的用户和一些注意点;当然你也可以登陆http://www.dinkumware.com/manual …… amp;page=index.html获取ANSI C库详细信息。
3.攻克C的难点
C语言声明:
C语言的声明确实让我觉得恐怖,比较晦涩难懂,而且声明的形式和使用的形式还类似。比如如下的声明恐怕就连很多熟悉C多年的程序员也不是一眼就能看出来的:
char * const * (*next)();
那么有没有一种好的记忆方法或规则来搞清楚呢,好像没有,如果有的话也不是这样折磨人了。不过可以看看《C专家编程》第三章的内容,或许你会有所收获。也只能多学多练了,所谓熟能生巧嘛,希望这个问题不要在你的心灵上留下阴影。
数组与指针:
数组与指针的关系,在标准中并没有作很详细的规定,而且好多C入门的书籍在这个问题上并没有给出很详细的说明,所以会给人造成很多误解。
对于这个问题,你可以参考《C缺陷与陷阱》4.5节和《C专家编程》第4,9,10章,相信你这里面的内容搞透彻,以后就不会再被这个问题搞迷惑。
指针与内存:
如果你以后编写规模较大的程序,你可能发现这个问题可能会是你最大的烦恼,而且可能会是你消耗最多调试时间的事项。
C版本的问题:
你得特别小心该问题,最好不要在你的程序中混合使用不同版本C的特性,否则会给你带来很迷惑的问题。如果一定要用,你最好清楚自己在做什么。
还有一些其他C中的难点和容易错误的地方,可以学习前人的一些经验。以下是一个c FAQ的链接地址,相信在这篇文档中有你需要的大部分问题的解决方法。
http://c-faq-chn.sourceforge.net/
4.UNIX环境编程
学习了以上内容之后,我相信,你就可以进行unix环境编程了。不过你可能需要对操作系统理论有一点点的了解,这样学起来会比较轻松一些。
Unix环境编程,你应该着重IO和进程两大块内容。《Unix环境高级编程》中对Unix环境编程有着非常详细且深入的论述,而且书中有大量实用性例子程序,不过可能得花上几个月得时间,好好啃一啃了。
在扎实掌握以上内容,不代表你得C语言学习支路已经完成,相反,才刚刚开始。以后你需要用学到得知识去解决大量不同实际问题,在不断得实践过程中,你会近一步加深对C的理解。有了以上基础之后,你会发现,在实践过程中需要的其他知识,你会非常快速的掌握。
方法篇
编程是一个实践性很强的工作,最好的学习方法就是边看书边调试代码,把书上的例子程序反复的修改调试运行,从中得到自己的体会。 在自己的学习或工作中写的一些测试的程序,要分门别类的保存下来,在以后的实际工作中不断的整理,日积月累就是一个很好资源库了。
有时候,可能会觉得书上的例子作为理解概念时比较通俗易懂,但实用价值不高。所以要提高自己的编程能力,你还需要学习别人的代码,我认为研究别人的代码是提高自己实际编程能力最好且最快的途径,现在网络上有很多价值很高的开源代码可供你选择学习。
最后,不得不提到的一个问题就是,千万不要让自己淹没在各种技术细节的海洋中,比如前缀++运算符问题,表达式计算优先级问题等。
学习UNIX下C编程也好,还是其他编程语言,我们最后的目标都是为了使用计算机解决现实中的问题,所以积累日常工作中常见问题的解决方法,并形成一定的范式,做一些提炼才是最重要的。说到底,设计和编程所做的事情,就是方法论,不管你是无意识还是有意识的,所以一定要注重积累。
补充说明
1. 对于有人问是否需要一份ANSI C99标准,对于一般开发人员,并没有必要,且不说其语言晦涩难懂,即使你能从头到尾学习一遍,我想对你的编程也没有什么提高。
2. 目前多数UNIX操作系统所带的cc、gcc等编译器好像并不支持 C99 的所有新特性,不过现在已经有足够多的新特性普遍可用,因此有理由开始认真考虑在新的开发中采用 C99 特性,尤其是用在它们使得效率或清晰度本质上发生变化的那些地方(比如以内联函数代替宏替换)。
3. 编程规范的问题:一般较为正规的软件公司都会有自己的一套完成的编程规范,那么你遵守就好;如果你是自己学习的话,可以选择一个较为通用的规范,最好的方法就是看别人是怎么写代码的。
就不得不说说UNIX编程书籍。Stevens先生的《unix环境高级编程》是我竭力推荐的,也是我的案头必备(如果对网络编程有兴趣的,可以学习一下Stevens先生的《UNIX网络编程》两卷,如果觉得还不过瘾,可以再看看《TCP/IP详解》三卷)。
6.《计算机编程艺术》
推荐理由:算法大师得呕心沥血之作。计划出版五卷书,目前好像已出版3卷。对算法有兴趣得可以研究一下。


学习linux有什么用
呵呵,你的问题还真不少。学习Linux当然有用了,学习linux后,如果还想学编程语言的话,有如下选择:可以学C,因为Linux内核就是C编出来的,学好了C能更好的理解Linux;或者python,一种很强大的面向对象编程语言,学好了,进行Linux服务器管理相当的方便;还有就是php,现在很多公司招Linux方向的人员时...

Linux操作系统,现在,属于哪个国家的版权?
Linux没有版权,是一套免费使用和自由传播的类Unix操作系统,它能运行主要的Unix工具软件、应用程序和网络协议。开放源码使得用户可以自由裁剪,灵活性高,功能强大,成本低。尤其系统中内嵌网络协议栈 ,经过适当的配置就可实现路由器的功能。这些特点使得Linux成为开发路由交换设备的理想开发平台。

在什么情况下需要使用Linux
Linux 因为是个 Unix 的仿制(记得有介绍 Linus 很不满 MINIX 这个教学系统的功能)自己就模仿写出了 Linux 0.01 。之后慢慢发展,因为是对 UNIX 类的模仿,故而可以支持很多 UNIX 的特性,也借助 GNU 项目,以及很多公开的标准,成为了 *nix 的一员,但要记住 Linux 和 UNIX 不是一个东西。他们...

1k=1000byte,1byte=8bit,那就是1k=8000bit,1M=1000k=8000000bit。是这样...
首先你要知道, KB 跟 kB 是两个系统不同的东西, kB 是 *nix (Unix, Linux) 用的, 其计算方法就是如你所说的 1kb = 1000bytes, 但, 当称之为 KB 的时候, 那是微软 (Windows) 的算法, 1KB = 1024 byte ( 2^10 bits), 这是因为 8 bit 1 byte 以外, 其档案系统还保留了 2 bits...

linux系统的根目录表示方法
1、linux 中根目录用:\/表示。根目录一般是在安装linux时做分区就配置好,linux的分区大致有根、swap、boot和其他分区。2、按照实际排序查看根目录的文件: ls -ltrh \/

为什么要在linux\/unix下进行c\/c++编程?
这个要看具体行业和需求的,简单的来说,如果客户就在linux下运行程序,难道你不给他开发这下面的程序吗?由于linux的内核是开放的,所以从稳定性和可信任度上来说,比windows要更让人信任一些,所以很多金融类的银行证券公司,后台服务器肯定都是linux\/unix的。而且这些系统的相对病毒也比较少,也比...

LinuX的发展前景将如何。谢谢了
Linux的发展 近几年的发展,已使得Linux成为微软、升阳的另一大敌手。Linux挟其价格低廉、品质良好与稳定的竞争优势,正无形无影地扩散至众多以PC为主的工作 平台上。早期因缺乏商业性应用软件,单凭学术味道浓厚的工具程序,是无法打入一般商家的主流操作系统的。然而,今日的Linux已非吴下阿蒙,KDE、 ...

求Linux发展历史的详细资料
于是*nix下的杀毒软件其实是查杀通过samba monnt的目录上的windows病毒。但作为windows来讲,病毒意味着意想不到的市场!而且这么大的经济效益也能推动全球的经济增长!用三个代表判断也是对人民有利的! 3)IDE 我觉得不同意那些对linux下IDE环境的看法。对优秀的程序员来说,整个Linux就是一个IDE,只不过你同他打交...

Linux运维工程师一般要求掌握哪些知识
做为一名运维工程师需要什么样的技能及素质呢,首先说说技能吧,如大家上面所看到,运维是一个集多IT工种技能与一身的岗位,对系统->网络 ->存储->协议->需求->开发->测试->安全等各环节都需要了解一些,但对于某些环节需熟悉甚至精通,如系统 (基本操作系统的熟悉使用,*nix,windows ..)、协议、...

linux挂载失败怎么解决linux挂载失败
a.U盘安装KaliLinux安装失败时返回,然后进入shell模式。1、卸载U盘(光盘)umount\/dev\/sda4 2、挂载mount\/dev\/sda4\/media\/cdrom b.把u盘拔了,然后重新插上,等u盘被系统识别后点击是,这个时候再探测就成功了。准备USB镜象。1.下载Kalilinux。2.如果你用的是Windows,下载Win32DiskImager。3.*nix类...

文水县19828086354: Unix和Linux下如何进行C语言学习?
简温盐酸: 尽管 C 语言问世已近 30 年,但它的魅力仍未减退.C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能. 本文是为了满足对C语言初...

文水县19828086354: linux 和 unix 下学习c语言设计开发,有什么要注意的地方?哪中平台下去学比较好? -
简温盐酸: unix系统一般见不到,收费很贵,能见到的是linux, 开源免费的.学习c语言当然在linux下要比windows下好多了,llinux下的工具像gcc,make,gdb都很强大,需要都是命令行操作.它们对c语言标准的支持度更高,windows下的vc,vs对c语言标准...

文水县19828086354: 学习Unix/Linux编程要学些什么 -
简温盐酸: 感觉这本书写的还是不错的,讲的Unix/Linux系统编程,主要是通过讲解Unix系统上的命令程序是如何实现的来分析了Unix系统的原理和系统编程.比如讲解了who,cp,ls,pwd等命令用Unix C语言应该怎么实现.通过这种讲解方式,不仅学会了...

文水县19828086354: Unix下C编程和Linux 下C编程有什么关系?
简温盐酸: linux是开源的,Unix是纠费的 我想你学linux下的C会比较好些,毕竟它是开源的嘛,而且GCC编译对C的支持很好的 基本它们之间没有什么本质的区别,而且学C嘛,又不是学OS,这两个OS都行

文水县19828086354: linux下的C语言怎么学习 -
简温盐酸: 系统调用是系统内核向外提供的接口,因win和linux系统实现不同,所以也就不同.但是你所说的stdio是标准库,是封装在系统调用之上的的层次,只要符合ISO C的标准,就一定会实现这个库,不管是VC和linux C都会包含这个头文件,类似的库还有stdlib、math、signal等.但是linux C奉行的POSIX标准中的一些库,在VC中可能就不支持了,比如sem、shm、ipc等等.C语言只是一种语言,但是在不同的环境中,它有不同的“实现”方式.建议你读一本叫做《UNIX环境高级编程》的书,这是圣经.

文水县19828086354: 如何着手学习UNIX?和学习LINUX有什么联系?谢谢
简温盐酸: 多学多练啊.如果你没有UNIX环境,则建议安装一个LINUX. 学UNIX一般需要这些方面: 1.学习基础命令; 包括 cd ls ps echo test head tail tar find grep sed awk 等 在熟悉...

文水县19828086354: 为什么要学习C语言 -
简温盐酸: 1.简约 虽说用好c语言很难,但是对于c语言的入门是很容易的,用一句话来形容c语言,我觉得是易于上手,难于精通,C语言在语法上的使用很简单,因为它不是很高级,也不是很庞大,在第二版(K&R)中,它的参考手册仅仅用了49页就描...

文水县19828086354: 什么是C语言?学习C语言需要懂那些电脑知识? -
简温盐酸: C语言是一种计算机程序设计语言.它既具有高级语言的特点,又具有汇编语言的特点.它由美国贝尔研究所的D.M.Ritchie于1972年推出.1978后,C语言已先后被移植到大、中、小及微型机上.它可以作为工作系统设计语言,编写系统应用程...

文水县19828086354: unix linux 乌班图 有什么区别?一直很疑惑!使用这些系统对c语言学习有好处吗? -
简温盐酸: 一是个大型操作系统 二是模仿一开发的开源操作系统,二者操作大同小异 三是二的一个版本(二有一百多少个版本) 因为二是全世界数万高手共同开发的,又是开源的,学C语言到一定程度可以看看这些源码,学一下高手的编程思想

文水县19828086354: 怎样学好C语言
简温盐酸: 你好,学编程其实和学数学差不多,语言到不难,难的主要是算法.所以学编程你光看教程一点用都没有,必须上机练习才行.最好是看书看一个知识点就上机实践下.大学课程也是1节理论课1节上机课交替上的.开始都是学的基础,这个时候最好稳一点,因为c语言也是很多别的语言的基础,所以你c语言的基础就一定要打好,这样学别的就快了.像我们学java,前面和c类似的部分老师一语带过了,c的基础不好了就更不上了.多找些题做做,多熟悉点算法.总之还是要多练习,祝你学业有成.

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网