linux操作系统下C语言编程入门-

上传人:心**** 文档编号:147285206 上传时间:2020-10-08 格式:PDF 页数:88 大小:242.42KB
返回 下载 相关 举报
linux操作系统下C语言编程入门-_第1页
第1页 / 共88页
linux操作系统下C语言编程入门-_第2页
第2页 / 共88页
linux操作系统下C语言编程入门-_第3页
第3页 / 共88页
linux操作系统下C语言编程入门-_第4页
第4页 / 共88页
linux操作系统下C语言编程入门-_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《linux操作系统下C语言编程入门-》由会员分享,可在线阅读,更多相关《linux操作系统下C语言编程入门-(88页珍藏版)》请在金锄头文库上搜索。

1、 本文由l i 0524158198贡献 d o c 文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机 查看。 l i n u x 操作系统下 c 语言编程入门 (一)目录介绍 程序设计入门基础知识 1)L i n u x 程序设计入门-基础知识 程序设计入门进程介绍 2)Li n u x 程序设计入门-进程 介绍 程序设计入门文件操作 3)Li n u x 程序设计入门-文件操作 4)Li n u x 程序设计入 门-时间概念 程序设计入门-时间概念 -程序设计入门信号处理 5)Li n u x 程序设计 入门-信号处理 程序设计入门消息管理 6)Li n u x 程

2、序设计入门-消息管理 程序设计 入门线程操作 7)Li n u x 程序设计入门-线程操作 8)Li n u x 程序设计入门网络编程 8 )Li n u x 程序设计入门-网络编程 9)Li n u x 下 C 开发工具介绍 (二)具体内容 1)Li n u x 程序设计入门-基础知识 Li n u x 下 C 语言编程基础知识 前言: 这篇文章介绍在 LINUX 下进行 C 语言编程所需要的基础知识.在这篇文章当中, 我们将 会学到以下 内容: 源程序编译 Ma k e f i l e 的编写 程序库的链接 程序的调试 头文 件和系统求助 1.源程序的编译 1.源程序的编译 在 Li n

3、u x 下面,如果要编译一个 C 语言源程序,我 们要使用 GNU 的 g c c 编译器. 下面我们 以一个实例来说明如何使用 g c c 编译器. 假设我们有下面一个非常简单的源程序(h e l l o .c ): i n t m a i n (i n t a r g c ,c h a r *a r g v ) p r i n t f (He l l o Li n u x n ); 要编译这个程序,我们 只要在命令行下执行: g c c -o h e l l o h e l l o .c g c c 编译器就会为我们生成一个 h e l l o 的可 执行文件.执行./h e l l o

4、就可以看到程序的输出 结果了.命令行中 g c c 表示我们是用 g c c 来 编译我们 的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为 h e l l o 而 h e l l o .c 是我们的源程序文件. g c c 编译器有许多选项,一般来说我们只要知道其中的几个 就 够了. -o 选项我们已经知道了,表示我们要求输出的可执行文件名. -c 选项表示 我们只要求 编译器输出目标代码,而不必要输出可执行文件. -g 选项表示我们要求编 译器在编译的时候 提供我们以后对程序进行调试的信息. 知道了这三个选项,我们就 可以编译我们自己所写的 简单的源程序了,如果你想要知道更

5、多的选项,可以查看 g c c 的帮助文档,那里有着许多对其 它选项的详细说明. 2.Ma k e f i l e 的编写 假设我们 有下面这样的一个程序,源代码如下: m a i n .c #i n c l u d e m y t o o l 1.h #i n c l u d e m y t o o l 2.h i n t m a i n (i n t a r g c ,c h a r *a r g v ) m y t o o l 1_p r i n t (h e l l o ); m y t o o l 2_p r i n t (h e l l o ); /* m y t o o l 1.

6、 h */ #i f n d e f _MYTOOL_1_H #d e f i n e _MYTOOL_1_H v o i d m y t o o l 1_p r i n t (c h a r *p r i n t _s t r ); #e n d i f /* m y t o o l 1.c */ #i n c l u d e m y t o o l 1.h v o i d m y t o o l 1_p r i n t (c h a r *p r i n t _s t r ) p r i n t f (Th i s i s m y t o o l 1 p r i n t %s n ,p r

7、 i n t _s t r ); /* m y t o o l 2.h */ #i f n d e f _MYTOOL_2_H #d e f i n e _MYTOOL_2_H v o i d m y t o o l 2_p r i n t (c h a r *p r i n t _s t r ); #e n d i f /* m y t o o l 2.c */ #i n c l u d e m y t o o l 2.h v o i d m y t o o l 2_p r i n t ( c h a r *p r i n t _s t r ) p r i n t f (Th i s i s

8、 m y t o o l 2 p r i n t %s n ,p r i n t _s t r ); 当然由于这个程序是很短的我们可以这样来编译 g c c -c m a i n .c g c c -c m y t o o l 1.c g c c -c m y t o o l 2.c g c c -o m a i n m a i n .o m y t o o l 1.o m y t o o l 2.o 这样的话我们也 可以产生 m a i n 程序,而且也不时很麻烦.但是如果我们考虑一下如果有一天我们修改 了其中的一个文件(比 如说 m y t o o l 1.c )那么我们难道还要重新输入上

9、面的命令?也许 你会说,这个很容易解决啊, 我写一个 SHELL 脚本,让她帮我去完成不就可以了.是的 对于这个程序来说,是可以起到作用 的.但是当我们把事情想的更复杂一点,如果我们 的程序有几百个源程序的时候,难道也要编 译器重新一个一个的去编译? 为此,聪明的 程序员们想出了一个很好的工具来做这件事情, 这就是 m a k e .我们只要执行一下 m a k e ,就可以把上面的问题解决掉.在我们执行 m a k e 之前, 我们要先编写一个非常重要的 文件.-Ma k e f i l e .对于上面的那个程序来说,可能的一个 Ma k e f i l e 的文件是: # 这是 上面那个程

10、序的 Ma k e f i l e 文件 m a i n :m a i n .o m y t o o l 1.o m y t o o l 2.o g c c -o m a i n m a i n .o m y t o o l 1.o m y t o o l 2.o m a i n .o :m a i n .c m y t o o l 1.h m y t o o l 2.h g c c -c m a i n .c m y t o o l 1.o :m y t o o l 1.c m y t o o l 1.h g c c -c m y t o o l 1.c m y t o o l 2.o :m

11、 y t o o l 2.c m y t o o l 2 .h g c c -c m y t o o l 2.c 有了这个 Ma k e f i l e 文件,不过我们什么时候修改了源程序当中 的什么文件,我们只要执 行 m a k e 命令,我们的编译器都只会去编译和我们修改的文件 有关的文件,其它的文件她连 理都不想去理的. 下面我们学习 Ma k e f i l e 是如何编写 的. 在 Ma k e f i l e 中#开始的行都是注释 行.Ma k e f i l e 中最重要的是描述文件的依赖 p a g e 1 关系的说明.一般的格式是: t a r g e t : c o m

12、p o n e n t s TAB r u l e 第一行表示的是依赖关系 .第二行是规则. 比如说我们上面的那个 Ma k e f i l e 文件的第 二行 m a i n :m a i n .o m y t o o l 1.o m y t o o l 2.o 表示我们的目标(t a r g e t )m a i n 的依赖对象 (c o m p o n e n t s )是 m a i n .o m y t o o l 1.o m y t o o l 2.o 当倚赖的对象在目标修改后修改的话,就要 去执行规则一行 所指定的命令.就象我们的上 面那个 Ma k e f i l e 第三行所

13、说的一样要执行 g c c -o m a i n m a i n .o m y t o o l 1.o m y t o o l 2.o 注意规则一行中的 TAB 表示那里是一个 TAB 键 M a k e f i l e 有三个非常有用的变量.分别是$,$,$代表的意义分别是: $-目标文件, $-所有的依赖文件,$-第一个依赖文件. 如果我们使用上面三个变量,那么我们可以 简化我 们的 Ma k e f i l e 文件为: # 这是简化后的 Ma k e f i l e m a i n :m a i n .o m y t o o l 1.o m y t o o l 2.o g c c -o

14、 $ $ m a i n .o :m a i n .c m y t o o l 1.h m y t o o l 2.h g c c -c $ m y t o o l 1.o :m y t o o l 1.c m y t o o l 1.h g c c -c $ m y t o o l 2.o :m y t o o l 2.c m y t o o l 2.h g c c -c $ 经过简化后我们的 Ma k e f i l e 是简单了一点,不过人们有时候 还想简单一点.这里我们学 习 一个 Ma k e f i l e 的缺省规则 .c .o : g c c -c $ 这个规 则表示所有的 .

15、o 文件都是依赖于 相应的.c 文件的.例如 m y t o o l .o 依赖于 m y t o o l .c 这样 Ma k e f i l e 还可以变为: # 这是再一 次简化后的 Ma k e f i l e m a i n :m a i n .o m y t o o l 1.o m y t o o l 2.o g c c -o $ $ .c .o : g c c -c $ 好了,我们的 Ma k e f i l e 也差不 多了,如果想知道更多的关于 Ma k e f i l e 规则可以查看相 应的文档. 3.程序库的链接 3.程序库的链接 试着编译下面这个程序 /* t e m

16、 p .c */ #i n c l u d e i n t m a i n (i n t a r g c ,c h a r *a r g v ) d o u b l e v a l u e ; p r i n t f (Va l u e :%f n ,v a l u e ); 这个 程序相当简单,但是当我们用 g c c -o t e m p t e m p .c 编译时会出现下面所示的错误. / t m p /c c 33Ky d u .o : In f u n c t i o n m a i n : /t m p /c c 33Ky d u .o (.t e x t +0 x e ): u n d e f i n e d r e f e r e n c e t o l o g c o l l e c t 2: l d r e t u r n e d 1 e x i t s t a t u s 出现这个错误是因为编 译器 找不到 l o g 的具体实现.虽然我们包括了正确

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 中考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号