Linux环境C程序设计(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-02 01:46:39

点击下载

作者:徐诚

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux环境C程序设计(第2版)

Linux环境C程序设计(第2版)试读:

前言

Linux系统基于开源软件思想而产生,而且促进了开源软件技术的发展,这种先进的软件设计思想引领着全球软件业的变革,为软件技术的发展带来了强劲的动力。随着Linux系统的发展和广泛应用,今天的Linux 系统已经占据了绝大多数嵌入式系统,并在PC服务器市场也占有很大份额,其桌面系统的普及率也逐年上升。越来越多的开发者希望了解Linux系统开发技术,特别是基于Linux系统上最流行的C语言开发技术。

笔者一直从事技术研究,曾经为《程序员》、《电脑报》和CSDN社区翻译和编撰了很多相关的技术文章,但觉得独立的文章对普通读者帮助不大,所以特写本书,希望将自己的经验同更多读者分享。

本书是获得了大量读者好评的“Linux典藏大系”中的《Linux环境C程序设计》的第2版。本书全面介绍了Linux系统上C语言开发技术,内容由浅入深,适合各个水平阶段的读者学习。同时,笔者将Linux所依存的开源软件思想介绍给读者,并将其与当前流行的软件工程思想结合,通过案例贯穿于全书,力求使读者学习完本书后,不但能掌握开发技术,还能获得与国际一流的软件工程师共同工作的能力。关于“Linux典藏大系”“Linux典藏大系”是清华大学出版社自2010年1月以来陆续推出的一个图书系列,截止2012年底,已经出版了10余个品种。该系列图书涵盖了Linux技术的方方面面,可以满足各个层次和各个领域的读者学习Linux技术的需求。该系列图书自出版以来获得了广大读者的好评,已经成为了Linux图书市场上最耀眼的明星品牌之一。其销量在同类图书中也名列前茅,其中一些图书还获得了“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”。该系列图书出版过程中也得到了国内Linux领域最知名的技术社区ChinaUnix(简称CU)的大力支持和帮助,读者在CU社区中就图书的内容与活跃在CU社区中的Linux技术爱好者进行广泛交流,取得了良好的学习效果。关于本书第2版

本书第1版出版后深受读者好评,并被ChinaUNIX技术社区所推荐。但是随着Linux技术的发展,本书第1版的内容与Linux各个新版本有一定出入,这给读者的学习造成了一些不便。应广大读者的要求,我们结合Linux技术的最新发展推出第2版图书。相比第1版,第2版图书在内容上的变化主要体现在以下几个方面:(1)Linux系统由Fedora更换为Ubuntu 12.04。(2)Eclipse更新为最新的Juno版本。(3)GTK+环境使用最新的GTK+3版本。(4)取消了libglade函数库,转而使用GTK+库相关函数。(5)Glade界面设计器更新为最新的glade 3版本。(6)其他用到的函数库均使用新版。(7)修订了第1版中的一些疏漏,并将一些表达不准确的地方表述得更加准确。本书特色1.配多媒体教学视频,学习效果好

作者为本书录制了配套多媒体教学视频,以便让读者更加轻松、直观地学习,提高学习效率。这些视频与本书源代码一起收录于配书光盘中。2.内容全面、系统、深入

本书详细介绍了Linux系统的安装、Linux C开发的基础知识、界面开发、数据库开发、网络编程、系统功能编程和多媒体开发等内容,通过开发MP3播放器的各个模块,让读者深入理解一个完整项目的开发流程。3.讲解由浅入深,循序渐进,适合各个层次的读者阅读

本书从Linux C基础开始讲解,逐步深入到的高级开发技术及应用,内容梯度从易到难,讲解由浅入深,循序渐进,适合各个层次的读者阅读,并均有所获。4.技术全面,剖析思想根源

抛开开源思想来研究Linux开发技术是徒劳的,开发者仅仅只能掌握表面的开发技术,而不能获得提高软件开发效率与项目成功率的科学方法。笔者花费3个多月的时间进行前期准备,更新统计了大量的技术信息,并与实际项目开发经验结合,将Linux系统开发技术、C/C++语言开发技术、软件工程思想融会贯通,将本书撰写成思想和内容都极其丰富的计算机教程。5.深入剖析难度案例

本书选择了一些比较难的软件项目作为案例分析,并贯穿全书逐步实现。这些案例包含当前流行的开发技术,并实践了先进的软件设计思想。读者通过学习和实践本书,不但能掌握开发技术,还能获得与国际一流的软件工程师共同工作的能力。6.提供技术支持,答疑解惑

读者阅读本书时若有任何疑问可发E-mail到bookservice2008@163.com获得帮助。也可以在本书的技术论坛(http://www.wanjuanchina.net)上留言,会有专人负责答疑。本书内容及体系结构

第1篇 Linux系统概述及开发环境搭建

(第1~4章)

本篇主要内容包括Linux介绍、Linux系统的安装及Linux C开发环境的搭建等。通过本篇内容的学习,读者可以了解Linux的由来及如何搭建Linux的开发环境。

第2篇 C/C++语言基础(第5~12章)

本篇主要内容包括C语言简介和程序设计知识、流程图的概念、数据类型、运算符和表达式、程序控制结构、数组与指针、函数、结构体与共用体及C++语言的面向对象程序设计思想和一些新的特性等。通过本篇内容的学习,读者可以掌握C语言的所有基础知识,并能对C++语言面向对象有所理解。

第3篇 Linux系统编程(第13~17章)

本篇主要内容包括文件操作及文件I/O操作、进程控制、进程间通信及线程控制等。通过本篇内容的学习,读者可以掌握Linux C中有关系统功能编程的核心技术及应用。

第4篇 Linux网络编程与数据库开发(第18~21章)

本篇主要内容包括网络编程基础、网络编程函数库、数据库、Linux 系统常用数据库及接口。通过本篇内容的学习,读者可以掌握Linux C中的数据库和网络编程技术及应用。

第5篇 Linux界面开发(第22~26章)

本篇主要内容包括界面开发基础、界面构件开发、界面布局、信号与事件处理、Glacle设计程序界面。通过本篇内容的学习,读者可以独立完成一些简单界面的设计及与C语言的连接使用。

第6篇LinuxC编程项目实战(第27章)

本篇主要介绍了一个媒体播放器的开发过程,以便于读者对Linux环境的项目开发有一个全面的认识,从而提高实际的项目开发水平。通过本篇内容的学习,读者可以具备实际的Linux软件项目开发能力。本书读者对象· Linux C初学者;· 想全面学习Linux C开发的人员;· Linux C专业开发人员;· 利用Linux C做开发的工程技术人员;· Linux C开发爱好者;· 大中专院校的学生;· 社会培训班学员;· 需要一本案头必备手册的程序员。本书作者

本书由徐诚主笔编写,其他参与编写的人员有陈冠军、陈浩、黄振东、蒋庆学、李代叙、李世民、李思清、李云龙、李志刚、刘存勇、刘燕珍、龙哲、吕轶、牟春梅、屈明环、石峰、史艳艳、宋宁宁、王德亮、王俊清、王雅宁、翁盛鑫。在此表示感谢!

虽然我们对书中所述的内容都尽量予以核实,并多次进行文字校对,但因时间所限,可能还存在疏漏和不足之处,恳请读者批评指正。编者第1篇Linux系统概述及开发环境搭建第1章Linux系统概述和安装

Linux系统是一种类UNIX的完整操作系统。它不仅功能强大、运行稳定,而且用户可免费使用,分析其源代码。Linux系统支持x86、ARM等大多数常见硬件架构和TCP/IP等主流网络协议,有良好的跨平台性能,应用面极其广阔。本章将介绍Linux系统的基本概念,并演示如何安装一套带有X Window图形操作界面的Linux系统发布版本。1.1 引言

计算机系统由硬件系统和软件系统所组成,软件系统中最为重要的是操作系统。Linux作为操作系统管理着计算机内所有的硬件资源和软件资源,仿佛是计算机的灵魂。Linux系统基于GPL协议发布,该协议是GNU项目所创立开放源代码的公共许可证。要理解Linux系统并以一种全新的方式开发和发布软件,首先则需要了解GNU项目和Linux系统的渊源。1.1.1 GNU项目简介

GNU项目在1983年由理查德·斯托曼(Richard Stallman)创立,最初的目标是通过使用必要的工具从源代码开始创建一个自由的类UNIX操作系统。此前的软件均以源代码的形式发布,用户可以根据自己需要修改源代码。但软件厂商为了保护自己的商业利益,开始使用编译所得的二进制文件发布软件,从而使软件的源代码变为“商业秘密”。

为了改变当时不利于软件技术发展的格局,GNU项目花了10余年时间创建了GCC编译器和Emacs编辑器等多个工具。所有的工具以源代码形式发布,并且无须支付任何费用。只是这些工具的改进版本和衍生品必须遵循同样的发布形式,这就形成了GPL协议。但它在20世纪80年代缺少了一个最关键的组件,即操作系统核心,直到Linux系统的诞生。GNU项目组织结构如图1.1所示。1.1.2 Linux起源

安德鲁·塔能鲍姆(Andrew Tanenbaum)出于教学目的编写了名为Minix的类UNIX操作系统。芬兰赫尔辛基大学在读的学生林纳斯·托瓦兹(Linus Torvalds)认为Minix有许多地方不合理,于是开始为自己的AT 386微机设计新的操作系统核心。1991年8月,林纳斯将自己新设计的操作系统内核通过网络发布,命名为Linux系统。不久之后,Linux系统陆续推出了多个版本,并且吸引了更多开发者加入Linux系统开发的行列。许多开发者利用已有的GNU工具构建Linux系统并为它开发新的特性,使之成为GNU项目中重要的组成部分。最新版本的Linux操作系统桌面如图1.2所示。图1.1 GNU项目组织结构示意图图1.2 Linux操作系统桌面1.1.3 Linux发展现状

如今,Linux系统内核版本已发布到3.5版,它代表着当前操作系统技术的最前沿,并依然保持数周内一次的版本更新。更多的开发者进入到Linux系统开发的行列中,因此基于Linux系统的软件资源也十分丰富,而且这些资源同样能免费使用。绝大多数硬件产品具有针对Linux系统的支持,无论是将Linux系统作为桌面工作站还是服务器,都非常稳定易用。Linux系统的安装、操作和升级也越来越简单,有一些企业和开源组织对Linux系统进行了深入的扩展,他们将Linux系统以及一些重要的应用程序打包,并提供较方便的安装界面。同时,还提供一些有偿的商业服务,如技术支持等。

Linux系统进入我国的时间较早,我国的工程师对Linux系统的发展也做出了巨大贡献。所以,Linux系统在我国拥有一定的用户基础和大量的中文资源。Linux系统符合我国国情,不仅为信息化建设提供成本低廉的软件,而且其开放性也造就了众多中国人成为顶级软件工程师。1.1.4 免费软件与开源软件

免费软件与开源软件概念并不相同。免费软件通常以二进制文件形式发布,用户虽然可以免费使用,但无权对软件进行任何修改。开源软件是将软件以源代码形式发布,并遵循GPL等开源协议,用户不仅能使用,而且还可对软件进行改进。

Linux系统是开源软件,所以基于Linux系统开发必须遵循开源规则。这种开发方式最大的优势是,开发者能最大限度地利用现有代码,从而避免重复工作。举例说明,如果需要构建一个新的办公协作软件,在Linux系统上开发不用从最基本的联系人数据库开始编写,也不用从头开始编写一个即时通信协议。这些都可以从其他已有软件上继承,开发者只要注重软件新特性部分的实现即可。1.2 Linux内核与版本

Linux内核是该操作系统的核心程序文件,通过与其他程序文件组合,Linux又构成了许多版本。每种Linux版本都有其特点,例如嵌入式Linux版本专门用于较小的电子设备操作,而计算机中常用的是Linux桌面版和Linux企业版。1.2.1 Linux内核介绍

内核是操作系统的心脏,系统其他部分必须依靠内核这部分软件提供的服务,例如管理硬件设备、分配系统资源等。内核由中断服务程序、调度程序、内存管理程序、网络和进程间通信等系统程序共同组成。Linux内核是提供保护机制的最前端系统,它独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。

内核负责管理计算机系统的硬件设备,为硬件设备提供驱动。对于操作系统上层的应用程序来说,内核是抽象的硬件,这些应用程序可通过对内核的系统调用访问硬件。这种方式简化了应用程序开发的难度,同时在一定程度上起到了保护硬件的作用。Linux内核支持几乎所有的计算机系统结构,并将多种系统结构抽象为同样的逻辑结构。Linux 内核结构如图1.3所示。图1.3 Linux内核架构示意图

Linux内核继承了UNIX内核的大多数特点,并保留相同的API(应用程序接口)。Linux内核的特点如下:· Linux支持动态加载内核模块;· Linux支持对称多处理(SMP)机制;· Linux内核可以抢占(preemptive);· Linux内核并不区分线程和其他一般进程;· Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统;· Linux忽略了一些被认为是设计得很拙劣的UNIX特性和过时标准;· Linux体现了自由这个词的精髓,现有的Linux特性集就是Linux公开开发模型自由发展的结果。1.2.2 Linux所支持的硬件平台

Linux系统支持当前所有主流硬件平台,能运行在各种架构的服务器上,例如Intel的IA64、Compaq的Alpha、Sun的Sparc/Sparc64、SGI的MIPS、IBM的S396;也能运行在几乎全部的工作站上,例如Intel的x86、Apple的PowerPC。更吸引人的是,它支持嵌入式系统和移动设备,如ARM Linux内核短小精湛且功能全面,可根据特定硬件环境裁剪出具备适当功能的操作系统。另外,无论是32位指令集系统还是64位指令集系统,都能高效稳定运行。1.2.3 常用Linux版本

Linux系统拥有多个发行版,它可能是由一个组织、公司或者个人发行。通常一个发行版包括Linux内核、将整个软件安装到计算机的安装工具、适用特定用户群的一系列GNU软件。下面简单介绍一下常用的Linux发行版本。1.Fedora桌面版

Fedora项目是Red Hat赞助,由开源社区与Red Hat工程师合作开发的项目统称。它继承了Red Hat许多高端技术,例如YUM软件包管理器、虚拟机等。以网络论坛为平台, Fedora实现了开放的开发过程和透明的管理,并快速不断创新。所以,Fedora是最好的开源操作系统。Fedora适用于桌面工作站,并且为各种应用方向提供了丰富的应用程序。2.Ubuntu桌面版

Ubuntu是一个相对较新的发行版,但它的出现可能改变了许多潜在用户对Linux的看法。也许,从前人们会认为Linux难以安装、难以使用,在Ubuntu出现后这些都成为了历史。Ubuntu默认采用的GNOME桌面系统也将Ubuntu的界面装饰得简易而不失华丽,同时也发行KDE桌面的Kubuntu版本、Xfce桌面的Xubuntu版本。Ubuntu适合入门者了解Linux系统,它提供了多种安装模式,可在Windows分区上直接以虚拟机形式工作。3.Red Hat服务器版

全世界的Linux用户最熟悉的发行版想必就是Red Hat了。Red Hat在1995年创建,并为用户提供有偿的技术支持与升级服务。该版本适用于各种企业的服务器应用,支持大型数据库和应用系统,功能强大且系统稳定。4.OpenSUSE

OpenSUSE近年来广受Linux开发者欢迎,是德国最著名的Linux发行版,由Novell公司负责其项目的维护。在软件包管理器和桌面环境上,OpenSUSE独树一帜,研发出YaST软件包管理器等众多新产品。OpenSUSE的每一个主要版本都提供两年的安全和稳定性更新。并且每隔6个月,Novell就会发布一个新版本。该版本适用于各种软件开发工作站,集成了多种常用的软件开发工具。5.Debian

Debian最早由伊恩·莫窦克(Ian Murdock)于1993年创建。可以算是迄今为止最遵循GNU规范的Linux系统。Debian在全球有超过1000人的开发团队,为Debian开发了超过20000个软件包,这20000多个软件包覆盖了11种不同处理器。世界上有超过120份Linux发行版以Debian为基础,包括现在火热的Ubuntu。该版本适用于研究Linux系统,可快速得到各种系统分析与测试工具。1.3 系统安装

Linux系统安装是将安装介质内的系统文件复制到设备的硬盘上。安装前需要对硬盘进行分区,Linux系统拥有专门的分区结构。安装过程中Linux系统还会进行各种程序的配置。本节讲解Linux发行版的安装与配置。1.3.1 安装前的准备

安装Linux系统前,首先可根据用途和硬件平台选择一个Linux发布版本。若读者具备丰富的Linux知识,也可从内核开始编译一个全新的Linux版本。获得Linux发布版本可在因特网上直接下载,也可通过其他途径获得Linux发布版的复制,这是GPL协议中的合法行为。安装前需详细了解该版本对系统的需求,以及安装设备的硬件环境。Linux系统可自动识别大多数硬件设备,并为其找到合适的驱动程序,但难免有些不常见的设备需要额外准备驱动程序。常用Linux版本的下载地址罗列如下。· Ubuntu官方社区:http://www.ubuntu.com;· Fedora项目官方社区:http://fedoraproject.org;· Redhat公司网站:http://www.redhat.com;· OpenSUSE官方社区:http://www.opensuse.org;· Debain官方社区:http://www.debian.org。

注意:安装Linux系统可使用光盘、磁盘、USB存储器或网络服务器作为安装源,本章将以光盘为例介绍Linux系统的安装过程。1.3.2 系统需求

各种Linux版本有不同的系统需求,具体需求可在官方网站的安装说明内看到。得到系统需求列表后,可与安装设备的硬件列表进行对比,通常设备供应商会提供设备上的具体硬件型号列表。下面是当前流行的Linux桌面版本最低系统需求。· CPU:Intel Pentium兼容CPU,主时钟频率在400MHz以上;· 内存:256MB以上;· 硬盘:至少3GB空余空间;· 显卡:VGA兼容或更高分辨率显卡;· 其他:有鼠标、键盘、光驱等设备。1.3.3 硬盘分区

硬盘是常见的存储设备,大多数计算机都以硬盘作为主要的外储存器。为了便于管理, Linux系统允许将一块硬盘划分为多个分区,或者将多块硬盘划分为一个分区。分区的类型有3种,主分区(primary-partition)和扩展分区(extended-partition)是顶层的分区体系,逻辑分区(logical-partition)是扩展分区下的子结构。同一块硬盘上最多允许存在4个主分区和一个扩展分区,扩展分区以下的逻辑分区数量并无限制。

Linux系统常使用Ext3(Ext4)、Swap文件系统作为分区格式。Ext3是GNU中标准的文件系统。它是专门为Linux设计的,拥有极快的速度和极小的CPU占用率。Ext3还是一种日志式文件系统(Journal File System),最大的特点是它会将整个硬盘的写入动作完整地记录在磁盘的某个区域上,以便有需要时回溯追踪。Ext4是Ext3的升级版,它提供更大的容量支持和在线磁盘碎片整理工具,有更好的执行性能和可靠性。Ext3文件系统限制的最大卷为2TB, Ext4能够扩展到16TB。Swap是用于Linux系统中的一种专门用于交换分区的文件系统。

Linux系统至少需要一个交换分区和一个根分区。交换分区必须使用Swap文件系统,通常分配给它的磁盘空间是设备物理内存的1.5倍。它的作用相当于是虚拟内存,在物理内存不够的情况下,Linux系统将不活跃的数据放在交换分区内。根分区用于存放所有的系统文件和用户文件,可使用Ext3(Ext4)或其他Linux系统支持的文件系统。

为Linux系统分区前,首先需要对磁盘内的数据进行备份,然后使用分区工具对磁盘进行重新分区。如果需要在磁盘上保留其他操作系统,则需要为Linux准备足够的空闲磁盘空间。可先将一个或多个拥有足够大小的分区内的数据迁移到其他分区中,再删除这些分区获取空闲磁盘空间。常用的分区工具有Fdisk、PQ Magic。另外,在安装Linux系统时也可为磁盘进行分区。

注意:如果是初次安装Linux系统,并且需要保留当前计算机上的Windows操作系统,可使用虚拟机进行安装。虚拟机会在Windows分区上创建一个文件作为虚拟磁盘,这样可避免因操作不当而使整个磁盘的分区被破坏。Windows下可选的虚拟机软件有VMware、Wubi等,Ubuntu桌面版安装光盘中自带有Wubi虚拟机。1.3.4 以图形方式安装Linux

图形化Linux安装程序为用户提供了多种安装语言的选择和更简单易懂的安装信息。本节以Ubuntu 12 Live CD为媒介介绍安装Linux系统的过程。Live CD是Linux系统最新的发布形式,它不但能直接以CD 启动计算机进入到Linux系统,还提供了图形化安装程序。

下面以Ubuntu为例介绍图形方式安装Linux系统的过程。(1)通过Ubuntu Live CD引导计算机,屏幕上出现欢迎界面,如图1.4所示。图1.4 Ubuntu欢迎界面(2)欢迎界面可以选择语言。选择“中文(简体)”,确认后可以看到界面有“试用Ubuntu”和“安装Ubuntu”两个按钮。可以选择试用来体验一下Ubuntu系统。这里选择“安装Ubuntu”来安装系统,如图1.5所示。图1.5 欢迎界面(3)单击“安装Ubuntu”按钮,进入准备安装界面,如图1.6所示。图1.6 准备安装界面(4)单击“继续”按钮,进入硬盘分区向导界面,该界面有多种分区模式可以选择。“替换系统”选项会在硬盘安装有其他操作系统时出现,选择它会替换磁盘上现有的操作系统。“共存安装”会与现有的操作系统在一个磁盘上共存,组成“双系统”。“其他选项”用于自定义安装。这里选择“其他选项”,如图1.7所示。图1.7 安装类型选择界面(5)单击“继续”按钮后会进入硬盘分区界面。在硬盘分区画面中,建立一个Ext4格式的根分区和一个Swap格式的交换分区并选择引导器安装位置,如图1.8所示。引导程序是一个多系统引导管理器,可以管理多个Windows和Linux系统启动。图1.8 硬盘分区界面(6)单击“现在安装”按钮,这些分区将被格式化,然后系统就开始安装。在安装的同时会让用户进行一些必要的设置。首先会出现时区设置界面,如图1.9所示。图1.9 时区设置界面(7)在选择合适的时区后,单击“继续”按钮进入键盘布局设置界面,如图1.10所示。图1.10 键盘布局选择界面(8)在设置好合适的键盘布局后单击“继续”按钮进入账号设置界面,如图1.11所示。(9)根据提示输入账户信息后单击“继续”按钮,即可完成这些必要的设置,然后将会进入Ubuntu系统特色介绍界面,如图1.12和图1.13所示。图1.11 设置根账号界面图1.12 系统特色介绍界面(10)在系统安装的同时可以浏览介绍界面来了解一下这个系统。安装完毕后,系统将提示重新启动。这时取出光盘,单击“现在重启”按钮重新启动计算机,如图1.14所示。图1.13 系统特色介绍界面图1.14 重新启动界面(11)重新启动后计算机会进入Ubuntu系统登录界面,输入先前设置的密码后就可以进入Ubuntu系统界面,如图1.15所示。图1.15 系统登录界面

到此为止,一个全新的Ubuntu系统就安装完毕了。1.3.5 升级最新内核

为了使用Linux系统最新的特性,可在安装完成后对Linux内核进行升级。各个发行版的Linux系统都有软件管理器提供自动升级服务,但也可以根据需要手动升级内核。

Ubuntu桌面版和Debain可使用DEB软件管理器升级内核。在终端输入下列命令:

Fedora和Red Hat企业版可使用YUM软件管理器升级内核。在终端输入下列命令:

注意:YUM和DEB软件管理器使用方法相似,可以根据其中一种来推断另一种。所以在后面的章节中只列举YUM软件管理器的例子。另外,YUM和DEB软件管理器默认的更新源服务器通常在国外,升级内核前可根据需要在网络上搜索最新的国内更新源服务器地址,以提高升级内核及其他软件的速度。1.3.6 安装中文支持

大多数的Linux发行版都提供了多语言支持,并根据用户选择自动安装中文支持。中文支持通常包括中文字符编码、中文字库、软件的中文UI包和中文输入法。如果Linux安装完成后没有安装中文支持,可手动安装。中文支持的安装信息可查阅该发行版的中文社区。1.4 小结

本章介绍了Linux系统的基本概念和安装方法。Linux系统是一个开放的操作系统。理解了GNU项目后可快捷地开发各种软件。在学习后面的章节前,读者可根据自身需要安装一套Linux操作系统,以便实践各种开发技能。第2章Linux基本操作

Linux系统有两种操作方法。一种是使用鼠标键盘等输入设备直接在图形界面X Window上操作;另一种是通过输入文本命令方式在控制台上操作。各种Linux发行版的操作遵循同样的原则,所以操作方法非常相似。2.1 登录

安装有图形界面的Linux系统启动后会直接进入到X Window中,并提示输入用户名和密码登录。第一次登录可能需用创建一个新用户,该用户只是一个普通用户,不能直接进行系统配置。有些时候需要在控制台上登录,则直接输入用户名和密码即可。2.1.1 shell程序

shell是一种具备特殊功能的程序,也是介于用户和Linux内核间的一个接口。Linux系统拥有多种shell,发行版中常用的是名为bash的shell。这种shell不但能执行简单的命令,还能将多个命令、条件和参数编写为程序执行。使用Linux系统进行程序开发通常需要掌握一些常用shell命令,如表2.1所示。表2.1 常用shell命令及解释2.1.2 控制台

Linux系统是一个多用户多任务的分时操作系统。任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统,该账号的名称就是登录名。Linux系统通常有多个控制台,进入控制台后可使用shell程序操作计算机。例如,在控制台创建一个新用户的步骤如下:(1)Linux系统启动后进入X Window登录界面,按Ctrl+Alt+F2键,进入控制台,如图2.1所示。图2.1 控制台(2)输入根用户名root和密码获取系统管理员权限。密码是系统安装时所设置的。(3)输入下列命令,创建一个新用户,然后配置该用户的密码。(4)按Ctrl+Alt+F1组合键,返回到X Window界面,用新用户的用户名和密码登录。2.1.3 终端

终端是X Window里访问shell程序的接口。在GNOME桌面上打开终端的方式为选择“应用程序”|“系统工具”|“终端”命令,如图2.2所示。图2.2 打开终端

进入终端后,将以登录X Window的用户名登录shell。在安装软件或对系统配置进行改变操作时,通常需要获得根用户的权限。在终端中获得根用户权限的命令是su,如图2.3所示。图2.3 终端2.2 文件和目录

文件系统是在物理存储设备中存放数据的索引格式。文件和目录是数据的逻辑划分形式。在Linux系统中,文件的准确定义是不包含任何其他结构的数据流。Linux系统的文件类型概括起来可分为5种,分别是普通文件、目录文件、链接文件、设备文件和管道文件。· 普通文件就是平时所见的大多数文件,它的特点是不包含文件系统的结构信息。· 目录文件是用于存放文件路径及相关信息的文件,是文件系统的基本节点。目录文件使文件系统呈现出树形结构。在Linux系统中,通常所说的目录就是指目录文件。· 链接文件是指向另一个真实文件的链接,是一种特殊的文件结构。· 设备文件是保存计算机设备信息和接口的文件,这是Linux操作系统的独特形式,计算机的所有设备都以文件的形式提供给应用程序使用。· 管道文件是用于应用程序之间进行通信的文件。2.2.1 文件系统

文件系统是磁盘及其逻辑分区的目录结构。一个磁盘设备可包含一个或多个文件系统,但每个文件系统必须占据硬盘中单独的一个分区,如图2.4所示。Linux文件系统可以根据需要随时装载和移除,这种方法保证了文件存储空间的动态扩展和系统安全。当常用的Linux桌面版系统启动时,包含根目录的文件系统首先被装载,该文件系统上存放着保证系统正常运行的系统文件,其他文件系统在桌面环境启动时作为子系统会自动地安装到主系统中。

其中,mnt 是为挂载子文件系统而设置的挂载点。经过挂载之后,主文件系统与子文件系统就构成一个有完整目录层次结构的、容量更大的文件系统。已挂载的子文件系统也可从整个文件系统上移除,恢复安装前的独立状态。挂载和移除子文件系统的操作方法如下。(1)建立文件系统。当硬盘完成分区后,应该在该分区上建立文件系统,该操作又称为格式化。建立文件系统是通过mkfs工具来完成的。例如,如果需要在分区/dev/hdb1上建立ext4文件系统,可使用下列命令:图2.4 mnt挂载子文件系统

按照Linux系统对分区的命名规则,ATA接口的硬盘以字母组合hd开始,SCSI和SATA接口的硬盘以字母组合sd开始。第3个字母是硬盘的序号,a为第1块硬盘,b为第2块硬盘,依次类推。最后一位数字是分区的序号。(2)挂载子文件系统。创建文件系统后,需要使用命令mount将该文件系统安装到主文件系统中。例如将第(1)步中的hdb1分区挂载到“/mnt/dev”节点上,可使用下列命令:

在进行挂载前,首先要切换为根用户权限,否则无法访问“/mnt”目录。然后,为挂载点建立一个空目录。为了让所有用户都能访问和修改该目录,还需要使用chmod命令修改目录的权限。最后执行mount命令进行挂载,第1个参数是文件系统类型,第2个参数是分区的路径,第3个参数是挂载点的路径。(3)卸载子文件系统。对于一些可读写的移动设备来说,移除设备前需要进行卸载子文件系统操作。因为Linux系统使用了缓存机制,如果不卸载就移除设备可能会造成子文件系统数据丢失。例如,某个已挂载的USB存储器挂载点为/mnt/usbdisk,则卸载该文件系统的命令如下:

注意:对于正在进行读写操作的子文件系统不能使用umount命令卸载。卸载子文件系统前,应保证其中没有文件被打开。2.2.2 文件名

Linux系统的文件名由字符和数字组成,其中字符可以是大小写英文字母或其他Unicode编码的文字和符号,但不能包括“*”、“? ”和“[ ]”文件名通配符。Linux系统的文件名也有类似其他操作系统的扩展名,在文件名最后一个“.”后的内容即是扩展名。例如,C语言源文件的扩展名是c,头文件的扩展名是h。2.2.3 路径名

Linux文件系统采用带链接的树形目录结构,即只有一个根目录。根目录可含有下级子目录或文件;子目录中又可含有更下级的子目录或者文件。这样一层一层地延伸下去,构成一棵倒置的树,如图2.5所示。图2.5 文件的树形结构

路径名可分为绝对路径和相对路径。绝对路径是从根目录到目标目录或文件所经过的所有节点名称,例如图2.5中文件m1.c的绝对路径是“/home/shizhe/workspace/m1.c”。相对路径是某一个目录到目标目录或文件所经过的所有节点名称,如文件m1.c相对于“/home”的相对路径是“shizhe/workspace/m1.c”。2.2.4 工作目录

控制台或终端在某个时刻总是对应着一个目录,该目录即工作目录。在控制台或终端执行命令或程序,对某个没有指定路径的文件或子目录进行操作时,控制台或终端会自动在文件或子目录前加入当前工作目录的路径。例如,执行ls命令会将工作目录下的文件和子目录名称显示出来,除非在ls命令后输入某一具体的路径名称。工作目录可用“.”表示,工作目录上层父目录用“..”表示。cd命令用于改变工作目录。2.2.5 起始目录

用户通过控制台或终端登录时,起始目录为用户的主目录。默认情况下,起始目录是用户主目录,通常是“/home”目录中与用户的登录名相同的一个子目录。起始目录可用“~”符号表示。例如,无论当前工作目录为何处,下列命令都能用于显示起始目录下的文件或主目录。

控制台或终端会将“~”符号替换成用户起始目录的绝对路径,该符号也被认为是环境变量,Linux系统会自动维护“~”符号的值。2.3 输入和输出

Linux系统的输入和输出功能由Linux内核提供,内核管理着所有的输入与输出设备。这些设备以设备文件的形式存在,保存在“/dev”目录中。所有运行在Linux系统上的应用程序必须通过Linux内核进行输入与输出操作。本节简单介绍Linux内核的输入和输出概念。2.3.1 文件描述符

文件描述符是一个小的非负整数,内核用以标识某一特定进程正在存访的文件。当内核打开一个现存文件或创建一个新文件时,它会返回一个文件描述符给该进程,这样该进程就能通过内核访问目标文件。2.3.2 标准输入、标准输出和标准错误

按惯例,每当运行一个新程序时,所有的shell都为其打开3个文件描述符:标准输入、标准输出以及标准错误。如果像简单命令ls那样没有做什么特殊处理,则这3个描述符都连向终端。大多数shell均提供同一种描述方法,这样可以使任何一个或所有这3个描述符都能重新定向到某一个文件。例如:

执行ls命令,其标准输出重新定向到名为file.list的文件上。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载