Linux环境C程序设计
文章平均质量分 56
Linuxdianc
这个作者很懒,什么都没留下…
展开
-
26.3.2 使用libglade多语言支持
26.3.2 使用libglade多语言支持Linux系统本身具备完善的多语言支持体系,可使同一个可执行文件拥有不同地方语言的图形界面。这其中涉及到两个重要概念:国际化与本地化。国际化是指将开发者原先使用的母语翻译成多种其他的语言。由于实现翻译的途径、翻译的工作效率、翻译的可重用性等因素各不相同,使翻译工作面临很大困境,也阻碍了软件的推广和应用。为了方便地将软件翻译成不同语言的版本,就需原创 2009-12-21 14:47:00 · 792 阅读 · 0 评论 -
第18章 网络编程基础
第18章 网络编程基础计算机网络是通过通信线路互相连接的计算机的集合,它是由计算机及外围设备、数据通信和中断设备等构成的一个群体。TCP/IP协议是Internet上使用的协议,而Internet是世界上最大的计算机网络。国际标准化组织ISO对网络标准提出了OSI参考模型,该模型进一步规范了计算机网络的设计并解决了TCP/IP协议没有涉及的底层实现问题。Linux系统的一个主要特点是它的网络原创 2009-12-21 11:27:00 · 512 阅读 · 0 评论 -
16.2.1 D-Bus的基本概念
16.2.1 D-Bus的基本概念D-Bus是一个消息总线系统,其功能已涵盖进程间通信的所有需求,并具备一些特殊的用途。D-Bus是三层架构的进程间通信系统,其中包括:q 接口层:接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。q 总线层:总线层实际上是由D-Bus总线守护进程提供的。它在Linux系统启动时运行,负责进程间的消息路由和传递,原创 2009-12-21 10:56:00 · 1286 阅读 · 0 评论 -
16.2 进程间使用D-Bus通信
16.2 进程间使用D-Bus通信D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus的主要概率为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机原创 2009-12-21 10:55:00 · 602 阅读 · 0 评论 -
16.1.2 dup系统调用
16.1.2 dup系统调用系统调用dup用来复制一个文件描述符,该操作是通过对u区中文件描述符复制实现的。因此,系统调用dup能让多个文件描述符指向同一文件,便于管道操作。与该调用相关的函数有两个,分别是dup()函数和dup2()函数,一般形式如下: int dup(int oldfd);int dup2(int oldfd, int newfd); 其中,oldfd原创 2009-12-21 10:54:00 · 616 阅读 · 0 评论 -
16.1.1 pipe系统调用
16.1.1 pipe系统调用系统调用pipe用来建立管道。与之相关的函数只有一个,即pipe()函数,该函数被定义在头文件unistd.h中,它的一般形式是: int pipe(int filedes[2]); pipe系统调用需要打开两个文件,文件标识符通过参数传递给pipe()函数。文件描述符filedes[0]用来读数据,filedes[1]用来写数据。调用成功时,原创 2009-12-21 10:53:00 · 1056 阅读 · 0 评论 -
13.4 小 结
13.4 小 结本章讲解了通过系统调用方式实现的各种文件操作,正确地认识文件概念是掌握Linux系统文件操作编程的基础。Linux系统安全机制十分健全,所以在Linux系统上设计文件操作程序必需考虑因权限问题而产生的各种错误。在学习完本章后,建议读者建立自己的函数库处理各种文件操作错误,这样的自定义函数库对于将来的实际开发都会起到不可忽视的作用。另外本章介绍了系统调用的原理,有关系统调原创 2009-12-21 10:51:00 · 397 阅读 · 0 评论 -
13.3.2 搜索本地磁盘中所有媒体文件
13.3.2 搜索本地磁盘中所有媒体文件搜索本地磁盘中所有媒体文件可以利用13.3.1小节设计的link_add_dir()函数,将该函数搜索的路径设置为“/”。如下列源代码所示: int link_search(link_t *mlink){ return link_add_dir(mlink, "/");} link_search()函数只有一个参数,即媒原创 2009-12-21 10:50:00 · 606 阅读 · 0 评论 -
13.3 媒体播放器——增强媒体库功能
13.3 媒体播放器——增强媒体库功能在11章的实例部分已实现了为媒体库添加一个文件的功能,本章实例将介绍添加目录到媒体库的实现方法,以及搜索本地磁盘中所有媒体文件并添加到媒体库的方法。原创 2009-12-21 10:49:00 · 401 阅读 · 0 评论 -
13.2.6 错误处理
13.2.6 错误处理在进行文件操作的过程中可能会因各种原因而失败,错误信息将以代码的形式保存在系统变量errno中。很多函数通过改变errno变量的值输出标准错误信息编码,这些错误信息被保存在头文件errno.h内。进行错误处理的函数有两个,第一个是本书10.8节所介绍过的sterror()函数,该函数的作用是根据标准错误信息编码在映射表中查询相关字符串,并将该字符串的指针返回给调用者原创 2009-12-21 10:49:00 · 529 阅读 · 0 评论 -
13.2.5 删除目录或文件操作
13.2.5 删除目录或文件操作删除目录操作可使用函数rmdir()完成,该函数的一般形式是:rmdir(路径),该函数必须是在该目录下没有子目录或文件的情况下才能运行。删除文件操作可使用函数unlink(),该函数的一般形式是: unlink(路径); 如下例所示: if(mkdir("testdir", 0774) != -1) // 创建一原创 2009-12-21 10:49:00 · 532 阅读 · 0 评论 -
13.2.1 系统调用原理
13.2.1 系统调用原理 文件操作必须通过物理存储设备的驱动程序访问驱动器,如硬盘、光盘驱动器的驱动程序,这些驱动程序都存放在Linux的内核中。Linux系统的核心部分即是Linux内核,是一系列设备的驱动程序。系统调用是Linux内核提供的功能十分强大的一系列的函数。这些函数是在内核中实现的,它们是应用程序和内核交互的接口,如图13原创 2009-12-21 10:40:00 · 456 阅读 · 0 评论 -
13.1 文件属性与权限
13.1 文件属性与权限文件的属性与权限是Linux系统中目录和文件的两个基本特性,所有的目录和文件都具备这两种特性,它们决定了文件的使用方法与安全性问题。在Linux系统中,目录也是一种特殊的文件,并能够将其作为文件使用,这与直观获得对目录的体验并不一样。另外,Linux系统还有多种文件类型,例如设备文件、管道文件和链接文件,它们是文件概念的泛化。本节将介绍文件的属性与权限相关的知识。原创 2009-12-21 10:29:00 · 383 阅读 · 0 评论 -
第13章 文 件 操 作
第13章 文 件 操 作在Linux系统中开发C语言程序所涉及到的文件操作与其他平台有很大差别。Linux系统对目录和文件有极其严格的保护,只有获得相关权限的用户才能进行指定的操作。在本书的前面提到过,进程是处于活动状态的程序,某个用户通过操作系统运行程序所产生的进程代表着该用户的行为。如果用户不具备访问某个目录和文件的权限,那么该用户的进程也不能访问。本章将讲述文件的属性与权限问题和C语言原创 2009-12-21 10:28:00 · 459 阅读 · 0 评论 -
Linux环境C程序设计—前言
前 言Linux系统基于开源软件思想所产生,而且促进了开源软件技术的发展,这种先进的软件设计思想引领着全球软件业的变革,为软件技术的发展带来了强劲的动力。随着Linux系统的发展和广泛应用,今天的Linux系统已经占据了绝大多数嵌入式系统和PC服务器的市场份额,其桌面系统的普及率也逐年上升。越来越多的开发者希望了解Linux系统开发技术,特别是基于Linux系统上最流行的C语言开发技术。原创 2009-12-21 10:27:00 · 618 阅读 · 0 评论 -
18.1 计算机网络组成
18.1 计算机网络组成在学习网络编程前,首先需要了解的是计算机网络的组成,只有这样才能知道如何设计程序在其间进行通信,以及网络编程所面对的问题。物理层面上,计算机网络由计算机设备、网络连接设备、传输介质这3个部分组成;逻辑层面上,计算机网络由网络协议、网络应用软件、数据这3个部分组成。计算机网络根据其组成的形式又可分为多种结构,有的结构适用于某种环境,但更多情况是将多种网络结构复合使用组成原创 2009-12-21 11:28:00 · 543 阅读 · 0 评论 -
18.1.2 OSI 参考模型
18.1.2 OSI 参考模型国际标准化组织开发了开放式系统互联参考模型,以促进计算机系统的开放互联。开放式互联特点是支持不同系统环境互联。该模型为计算机间开放式通信所需要定义的功能层次建立了全球标准。该模型的层次依次为:q 物理层:物理层并非是指网络硬件或传输媒介,它只存在与抽象结构中,是负责数据流传输的最底层功能模块。物理层从第二层数据链路层(DDL)接收数据帧,然后以串行原创 2009-12-21 12:42:00 · 550 阅读 · 0 评论 -
26.2.4 设置构件属性
26.2.4 设置构件属性在Glade中,界面构件的属性被分为3类,分别位于“常规”、“包装”、“公共”选项卡中。“常规”选项卡内主要是构件基本信息和特有的属性。基本信息包括下列内容。q 类:构件对应GTK+库的类名,该值不可修改。q 名称:在程序中访问构件的名称,添加构件时Glade会为其自动指定一个。“包装”选项卡用于设置构件在容器中的位置,对于窗体和顶级原创 2009-12-21 14:23:00 · 661 阅读 · 0 评论 -
26.2.3 添加构件
26.2.3 添加构件Glade提供了两组界面构件,分别位于“控制和显示”选项卡与“过时的Gtk+”选项卡中,如图26.34所示。图26.34构件选项卡 后者是GTK+为了保持与旧版本兼容所以仍然在使用的界面构件。这些界面构件均已被其他构件所替代,并且不再被更新,甚至可能会被将来的版本抛弃,应谨慎选择这些构件。常用的界面构件可分为如下几原创 2009-12-21 14:16:00 · 781 阅读 · 0 评论 -
26.2.1 添加窗体
26.2.1 添加窗体Glade提供了10种窗体构件供用户选择,这些都是在GTK+中所预定义的。开发者可在Glade主界面左侧“顶层”选项卡中选择所需要添加的窗体构件,如图26.2所示。图26.2 顶层选项卡选项卡中每一个按钮对应着一种窗体构件,这些按钮的名称依次为:1.通用窗体构件通用窗体构件即gtk_window_ne原创 2009-12-21 13:19:00 · 957 阅读 · 0 评论 -
26.2 构造图形界面
26.2 构造图形界面任何复杂的图形界面都可以使用Glade构造,它可以缩短图形界面设计的周期,并在最大程度上保证代码的正确性。在使用Glade前,开发者需要对GTK+有初步的认识,本书前一部分的内容已介绍了这些知识。Glade可成为首选的界面设计软件,替代C语言中繁复的编码过程。本节将介绍使用Glade构造图形界面的方法。原创 2009-12-21 13:19:00 · 590 阅读 · 0 评论 -
26.1 Glade简介
26.1 Glade简介Glade界面设计软件是GNOME桌面环境的子项目,用于为GNOME桌面环境上运行的程序提供图形用户界面。Glade使用GPL协议发布,虽然是开源软件,但它的设计思想和易用性都领先于大多数商业集成开发环境中的界面设计工具。在Glade的界面中,大部分常用GTK+界面构件被作为图标放在工具栏中。开发者如果需要向界面中添加某一个构件,只需从工具栏上选择即可,如图26.原创 2009-12-21 13:18:00 · 711 阅读 · 0 评论 -
第26章 Glade设计程序界面
第26章 Glade设计程序界面Glade是Linux系统中设计GTK+程序界面的可见即可得工具。开发者可将窗体构件作为画布,通过向画布添加界面构件设计程序界面。这种方式最大的优势在于设计的同时能直观地看到界面构件,并且可以随时调整界面的设计,设计界面如同画图一般。Glade所设计的界面以XML格式保存,因此界面和程序逻辑是完全分离的,使程序界面设计更为轻松。本章将介绍Glade的使用方法,原创 2009-12-21 13:17:00 · 752 阅读 · 1 评论 -
18.5 小 结
18.5 小 结本章介绍了计算机网络的相关概念,以及使用套接字进行网络间通信的方法。套接字通信的方法适用于设计较底层的通信协议设计,其他的各种网络协议如FTP、HTTP等都是在套接字的基础上建立的。如果需要进行网络间多点的连接,可使用多进程或多线程的编程方法,在每个进程或线程中建立一个套接字连接,这样就能保证多个客户同时连接到服务器。原创 2009-12-21 13:16:00 · 597 阅读 · 0 评论 -
18.4.1 查询主机名称
18.4.1 查询主机名称查询主机名称是通过访问主机数据库实现的,服务器数据库接口函数在头文件netdb.h中定义。与此相关的函数有sethostbyaddr()和gethostbyname()两个,它们的一般形式如下: struct hostent *gethostbyaddr(const void *addr, size_t len, int type);struct hos原创 2009-12-21 13:14:00 · 991 阅读 · 0 评论 -
18.3.8 关闭连接
18.3.8 关闭连接系统调用close()函数可以结束服务器和客户上的套接字连接,就像对底层文件描述符进行操作一样。要想关闭套接字,就必须把服务器和客户两头都关掉才行。对服务器来说,应该在read()返回0时进行该操作,但如果套接字是一个面向连接的类型并且设置了SOCK_LINGER选项,close()调用会在该套接字尚有未传输数据时阻塞。原创 2009-12-21 13:13:00 · 422 阅读 · 0 评论 -
18.3.3 套接字地址
18.3.3 套接字地址每个套接字域都有独特的地址格式。对于一个AF_UNIX套接字来说,它的地址是由一个包含在sys/un.h头文件里的sockaddr_un结构描述的。该结构的定义为: struct sockaddr_un { sa_family_t sun_family; // AF_UNIX char sun_path[];原创 2009-12-21 13:08:00 · 589 阅读 · 0 评论 -
18.3.1 Socket套接字简介
18.3.1 Socket套接字简介Socket的英文原意是“插座”,作为类UNIX系统的进程通信机制,它如同插座一样方便的帮助计算机接入互联网通信。任何用户在通信之前,首先要先申请一个Socket号,Socket号相当于自己的电话号码。同时要知道对方的电话号码,相当于对方有一个Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址原创 2009-12-21 13:05:00 · 1115 阅读 · 0 评论 -
18.3 Socket套接字
18.3 Socket套接字Socket套接字由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了Socket套接字。Linux系统采用了Socket套接字,原创 2009-12-21 13:05:00 · 356 阅读 · 0 评论 -
18.2.2 IP互联网协议地址
18.2.2 IP互联网协议地址所有Internet上的计算机都必须有一个Internet上唯一的编号作为其在Internet的标识,这个编号称为IP地址。每个数据包中包含有发送方的IP地址和接收方的IP地址。IP地址是一个32位二进制数,即4个字节,为方便起见,通常将其表示为w.x.y.z的形式。其中,w、x、y、z分别为一个0至255的十进制整数,对应二进制表示法中的一个字节。这样的表示原创 2009-12-21 12:59:00 · 872 阅读 · 0 评论 -
18.2.1 IP协议与Internet
18.2.1 IP协议与Internet计算机网络技术在近50年的发展路程中,产生过多种不同的网络结构和通信协议,很多至今还在使用。让不同网络可相互访问的结局方案有两种:第一种是选择一种组网络结构为标准,使所有网络都按照同一方法来组建。这种方案显然没有可行性,因为不但网络重建的费用太高,而且没有一种网络结构能满足所有应用。因此,第二种方法被提出,该方法要求设计一种协议,能够让所有网络结构都能原创 2009-12-21 12:56:00 · 585 阅读 · 0 评论 -
26.4 小 结
26.4 小 结本章介绍了使用Glade设计程序界面的方法,以及使用libglade函数库在C语言代码中进行代码联编的方法。Glade是非常方便的界面开发工具,在项目中使用Glade可缩短界面代码的开发周期。但是,Glade也有其不足之处,对于过于复杂的界面或有个性化要求的界面不能起到简化编码的作用。因此,在项目中使用Glade设计程序界面前应先进行评估,对于大多数管理类、数据库类程序原创 2009-12-21 14:52:00 · 542 阅读 · 0 评论 -
26.2.5 添加事件和回调
26.2.5 添加事件和回调Glade主界面的“信号”选项卡中可为界面构件连接事件、信号和回调函数。所选构件可用的事件将以该构件对应的类的继承关系显示信号,如图26.38所示。上图是文本输入框所对应的信号。最底层为GObject类定义的信号,最顶层则是文本输入框所属的GtkEntry类定义的信号。单击类名称左侧的展开器,将显示出该类定义的所有信号,如图26.39所示。%注意:GtkW原创 2009-12-21 14:27:00 · 783 阅读 · 0 评论 -
26.3 C语言代码联编
26.3 C语言代码联编Glade的项目文件是一个单独的“.glade”文件,可通过libglade库将该项目文件添加到C语言源代码中。这样,就能在C语言编程写的程序中直接使用Glade设计的用户界面。本节将介绍libglade库的使用方法。原创 2009-12-21 14:32:00 · 655 阅读 · 0 评论 -
26.2.2 添加容器
26.2.2 添加容器Glade提供了19种容器构件供用户选择,这些都是在GTK+中所预定义的。开发者可在Glade主界面左侧“容器”选项卡中选择所需要添加的容器构件,如图26.18所示。 图26.18 容器选项卡 选项卡中每一个按钮对应着一种容器构件。根据使用方法和作用的不同,可将这些容器依次分为下列类别。1.横向组装盒与纵向组装盒原创 2009-12-21 13:50:00 · 1054 阅读 · 0 评论 -
18.3.7 请求连接
18.3.7 请求连接当客户想要连接到服务器的时候,它会尝试在一个未命名套接字和服务器的监听套接字之间建立一个连接。它们用connect()系统调用来完成这一工作,它的一般形式是: int connect(int socket, const struct sockaddr *address, size_t address_len); 参数socket指定的套接字将连接到参数a原创 2009-12-21 13:11:00 · 597 阅读 · 0 评论 -
18.3.6 接受连接
18.3.6 接受连接服务器上的应用程序创建好命名套接字之后,就可以通过accept()系统调用来等待客户端程序建立对该套接字的连接了。accept()的一般形式是: int accept(int socket, struct sockaddr *address, size_t *address_len); accept()系统调用会等到有客户程序试图连接到由socket参数原创 2009-12-21 13:10:00 · 640 阅读 · 0 评论 -
18.3.4 套接字的名字
18.3.4 套接字的名字要使socket()调用创建的套接字能够被其他进程使用,程序就必须给该套接字起个名字。AF_UNIX套接字会关联到一个文件系统的路径名上去,AF_INET套接字将关联到一个IP端口号上去。为套接字命名可使用bind()系统调用,它的一般形式如下: int bind(int socket, const struct sockaddr *address, siz原创 2009-12-21 13:09:00 · 646 阅读 · 0 评论 -
18.2.3 TCP协议
18.2.3 TCP协议原始的互联网使用的传输介质为电话线,计算机通过调制解调器将数值信号转为模拟信号,然后使用电流载波。因为电话线的噪声极大,很容易造成误码,因此TCP协议具有完善的循环校验机制。TCP是重要的传输层协议,必须保证数据传递的完整性。另外,数据包报文中有计算机端口号信息,可以用来区别同一计算机上不同应用程序的数据。数据包是很小的数据单位,而通过网络传递的连续数据往往是数据原创 2009-12-21 13:01:00 · 543 阅读 · 0 评论 -
18.2 TCP/IP协议
18.2 TCP/IP协议TCP/IP协议(Transmission Control Protocol/Internet Protocol)是随着Internet而发展的网络协议,目前应用最为广泛。Internet最初是因为美国国防需要而建立的,用于保证美国政府的计算机网络间能够互通,并保证遭受核打击时不至于瘫痪。TCP/IP很好地解决了不同网络互访问性和网路的健全性,领导着Internet原创 2009-12-21 12:53:00 · 557 阅读 · 0 评论