




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章 Linux的简介Linux是一类Unix计算机操作系统的统称,Linux操作系统的内核的名字也是“Linux”。Linux操作系统是自由软件和开放源代码发展中最著名的例子。严格来讲,Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于计算机业余爱好者Linus Torvalds,当时他是芬兰赫尔辛基大学的学生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能,因而开始了Linux雏形的设计。 它是Unix克隆(Unix clone)或Unix风格(Unix alike)的操作系统(OS),在原代码级上兼容绝大部分Unix标准(指的是IEEE POSIX,System V,BSD),是一个支持多用户, 多进程,多线程,实时性较好的功能强大而稳定的操作系统.它可以运行在x86 PC,Sun Sparc,Digital Alpha,680x0,PowerPC, MIPS等平台上,可以说Linux是目前运行硬件平台最多的操作系统。 Linux的历史是和GNU紧密联系在一起的。从1983年开始的GNU计划致力于开发一个自由并且完整的类Unix操作系统,包括软件开发工具和各种应用程序。到1991年Linux内核发布的时候,GNU已经几乎完成了除了系统内核之外的各种必备软件的开发。在Linus Torvalds和其他开发人员的努力下,GNU组件可以运行于Linux内核之上。整个内核是基于GNU通用公共许可,也就是GPL( General Pubic License)的,但是Linux内核并不是GNU 计划的一部分。Linux的标志和吉祥物是一只名字叫做Tux的企鹅,Linux的注册商标是Linus Torvalds所有的。这是由于在1996年,一个名字叫做William R. Della Croce的律师开始向各个Linux发布商发信,声明他拥有Linux商标的所有权,并且要求各个发布商支付版税,这些发行商集体进行上诉,要求将该注册商标重新分配给Linus Torvalds。 Linux的某些版本是不需要安装就能使用的版本,他们称为LiveCD传统的Linux用户一般都安装并设置自己的操作系统,他们往往比其他操作系统,例如微软Windows和Mac OS的用户更有经验。这些用户有时被称作“黑客”或是“极客”(geek)。然而随着Linux越来越流行,越来越多的原始设备制造商(OEM)开始在其销售的电脑上预装上Linux,Linux的用户中也有了普通电脑用户,Linux系统也开始慢慢抢占桌面电脑操作系统市场。同时Linux也是最受欢迎的服务器操作系统之一。Linux也在嵌入式电脑市场上拥有优势,低成本的特性使Linux深受用户欢迎。使用 Linux主要的成本为移植、培训和学习的费用,早期由于会使用Linux的人较少,这方面费用较高,但这方面的费用已经随着Linux的日益普及和 Linux上的软件越来越多、越来越方便而降低。第二章 Linux下C语言编程环境概述Linux下C语言编程常用的编辑器是vim或emacs,编译器一般用gcc,编译链接程序用make,跟踪调试一般使用gdb,项目管理用makefile。下面先通过一个小程序来熟悉这些工具的基本应用。各个工具的详细使用方法将在后面的各个章节逐步讲解。(1) 要编辑C源程序,应首先打开vim或emacs编辑器,然后录入以下多段源代码。使用main函数调用mytool1_print、mytool2_print这两个函数。 #include mytool1.h #include mytool2.h int main(int argc,char *argv) mytool1_print(hello); mytool2_print(hello); (2) 在mytool1.h中定义mytool1.c的头文件。 /* mytool1.h */ #ifndef_MYTOOL_1_H #define_MYTOOL_1_H void mytool1_print(char *print_str); #endif(3) 用mytool1.c实现一个简单的打印显示功能。 /* mytool1.c */ #include mytool1.h void mytool1_print(char *print_str) printf(This is mytool1 print %sn,print_str); (4) 在mytool2.h中定义mytool2.c头文件。 /* mytool2.h */ #ifndef _MYTOOL_2_H #define _MYTOOL_2_H void mytool2_print(char *print_str); #endif(5) mytool2.c实现的功能与mytool1.c相似。 /* mytool2.c */ #include mytool2.h void mytool2_print(char *print_str) printf(This is mytool2 print %sn,print_str); (6) 使用makefile文件进行项目管理。makefile文件内容如下。 main:main.o mytool1.o mytool2.o gcc -o main main.o mytool1.o mytool2.o main.o:main.c mytool1.h mytool2.h gcc -c main.c mytool1.o:mytool1.c mytool1.h gcc -c mytool1.c mytool2.o:mytool2.c mytool2.h gcc -c mytool2.c(7) 将源程序文件和makefile文件保存在Linux下的同一个文件夹下,然后运行make编译链接程序如下:davidlocalhost 1c$ makedavidlocalhost 1c$ ./mainThis is mytool1 print helloThis is mytool2 print hello第三章 Linux下C语言的调试调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题.Linux程序员就可以使用原始的调试方法, 在代码中加入printf信息。GNU早就组织开发了一套C语言编译器(Gcc)和调试工具(Gdb). Gdb虽然没有图形化的友好界面, 但是它强大的功能也足以与微软的VC工具相媲美, 给Linux程序员带来了福音. 下面通过一个简单的例子, 演示一下Gdb的使用流程:示例文件 demo.c 的源代码如下:#include int sum(int, int); intmain() int result; int a = 1, b = 2; result = sum(a, b); printf(%d + %d = %dn, a, b, result); return 0;intsum(int a, int b) return a + b;编译源文件, 生成可执行文件$ gcc -g -Wall -o demo demo.c虽然这段程序没有错误, 但调试完全正确的程序可以更加了解Gdb的使用流程. 接下来就启动Gdb进行调试. (1) 启动Gdb$ gdb demoGNU gdb (GDB) 7.0-debianCopyright (C) 2009 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type show copyingand show warranty for details.This GDB was configured as x86_64-linux-gnu.For bug reporting instructions, please see:.Reading symbols from /home/wangsheng/tmp/demo/gdb/demo.done.可以看出, 在Gdb的启动画面中指出了Gdb的版本号, 使用的库文件等头信息, 接下来就进入了由”(gdb)”开头的命令行界面了.(2) 查看源文件在Gdb中键入”l”(list的缩写)可以查看所载入的文件, 如下所示:(gdb) l1 #include2 int sum(int, int);4 int6 main()7 8 int result;9 int a = 1, b = 2;10 result = sum(a, b);(gdb) l11 printf(%d + %d = %dn, a, b, result);12 return 0;13 14 int16 sum(int a, int b)17 18 return a + b;19 (gdb) lLine number 20 out of range; demo.c has 19 lines.可以看出, Gdb列出的源代码中明确地给出了对应的行号, 这样就可以大大地方便代码的定位.(3) 设置断点设置断点是调试程序中一个非常重要的手段, 它可以使程序到一定位置暂停运行. 因此,可以在该位置方便地查看变量的值, 堆栈情况等, 从而找出代码的症结所在.在Gdb中设置断点很简单, 只需在”b”后加入对应的行号即可(这是最常用方式). 如下所示:(gdb) b 9Breakpoint 2 at 0x4004f4: file demo.c, line 9.注意: 该断点的作用是当程序运行到第 9 行时暂停(第 8 行执行完毕, 第 9 行未执行)(4) 查看断点信息(gdb) info bNum Type Disp Enb Address What2 breakpoint keep y 0x00000000004004f4 in main at demo.c:9(5) 运行代码接下来就可运行代码了, Gdb默认从首行开始运行代码, 可键入”r”(run的缩写)即可. 若想从程序中指定的行开始运行, 可在r后面加上行号.(gdb) rStarting program: /home/wangsheng/tmp/demo/gdb/demoBreakpoint 2, main () at demo.c:99 int a = 1, b = 2;可以看到程序运行到断点处就停止了.(6) 查看变量值键入p(print的缩写)+变量名即可查看该变量在此时的值(gdb) p a$1 = 1(gdb) p b$2 = 2(gdb) p result$3 = 32767 (7) 单步执行单步运行可以使用n(next的缩写)或者s(step的缩写), 它们之间的区别在于: 若有函数调用的时候, s会进入该函数而n不会. 因此, s就类似于VC等工具中的”step in”, n就类似于VC等工具中的”step over”.如果使用n命令显示如下:(gdb) n10 result = sum(a, b);下面使用 s 命令,跟踪进入 sum 函数:(gdb) ssum (a=1, b=2) at demo.c:1818 return a + b;可以看出执行 s 命令时进入了sum函数内部, 如果用 n 命令则跳过函数的调用部分(8) 恢复程序运行在查看变量值以及堆栈之后, 就可以使用命令c(continue)恢复程序的正常运行了. 这时, 它会把剩余还未执行的程序执行完, 并显示剩余程序的执行结果.(gdb) cContinuing.1 + 2 = 3Program exited normally.可以看出, 程序在运行完后退出, 之后程序处于”停止状态”.第四章 学习Linux下的C语言的心得 上了大学,进入了信息系,我与电脑的接触更多了,以前对电脑的了解真的少之又少,接触更是不多。高中时也有电脑课,但大多数都是老师教一些简单的操作方法和一些经常要用的一些小程序。现在接触了一些有关编程方面的东西,更深层次的对电脑有了一些了解。在学习的过程中,我知道了这些东西的复杂性与逻辑性等方面的问题。无论是编程还是程序运行等方面,我都有所了解了。现代社会的日益更新更是叫我们要努力拼搏,学好一些文化知识,只有这样子才能让自己有充足的电量来使我们更加有活力。 这些方面的知识让我大开眼界,真正让我体会到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自动控制原理(第2版)(余成波-张莲-胡晓倩)习题全解及MATLAB实验-第1、2章习题解答
- 计量管理制度范文
- 湖南省株洲市攸县第三中学2024-2025学年高三下学期5月期中地理试题(含答案)
- 设备操作规程汇编
- 高一年级5月月考地理 试题
- 幼儿园 疫情防控主题班会教案
- 建筑施工特种作业-建筑起重机械安装拆卸工(塔式起重机)真题库-3
- 建筑施工特种作业-建筑焊工真题库-5
- 厦门物理初中题目及答案
- 日语初级助词题目及答案
- 跨区域就读证明
- 国开期末考试《建筑制图基础》机考试题及答案(第D-1套)
- SA8000-2014社会责任绩效委员会SPT组织架构、职责和定期检讨及评审会议记录
- 学术论文写作规范与技巧课件
- 生物高中-基于大数据分析的精准教学课件
- 焊接热处理工艺卡
- 公共政策学(第三版)-课件
- 齐鲁医学Lisfranc-损伤
- 大型钢网架整体提升施工工法
- 干熄焦炉内固_气流动与传热数值模拟毕业论文
- 公司股东变更登记申请书(一变一)
评论
0/150
提交评论