linux 管理工具 gtk.docx

上传人:b****5 文档编号:6142365 上传时间:2023-01-04 格式:DOCX 页数:28 大小:314KB
下载 相关 举报
linux 管理工具 gtk.docx_第1页
第1页 / 共28页
linux 管理工具 gtk.docx_第2页
第2页 / 共28页
linux 管理工具 gtk.docx_第3页
第3页 / 共28页
linux 管理工具 gtk.docx_第4页
第4页 / 共28页
linux 管理工具 gtk.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

linux 管理工具 gtk.docx

《linux 管理工具 gtk.docx》由会员分享,可在线阅读,更多相关《linux 管理工具 gtk.docx(28页珍藏版)》请在冰豆网上搜索。

linux 管理工具 gtk.docx

linux管理工具gtk

摘要

Linux是一种自由和开放源代码的类Unix操作系统,可安装在各种计算机硬件设备中。

完全免费,稳定,功能强大的特性吸引了大量的用户。

Linux强大的功能是通过命令的形式展现出来的,即使用者必须学习Linux中提供的命令以及各种选项,增加了Linux用户使用Linux的难度。

为了方便使用和管理Linux系统,提供图形化的用户界面,系统采用C/S模式,使用GTK实现图形界面的编写,实现远程管理Linux的一种管理工具。

本系统以C/S模式实现,在客户端,采用GTK编程来实现操作界面。

在服务器端,选用linux系统的文件调用函数来读写配置文件中的数据。

采用SockTCP编程来实现客户端和服务器端之间的数据通信。

该系统主要功能实现对Linux系统用户和组的添加,删除,对应系统应用服务系统启动管理)进行管理和配置。

本论文是以系统的开发为主线,从软件设计的角度对系统的理论基础、系统整体架构及系统具体设计进行了详细研究。

关键词:

Linux;系统服务;GTK;Socket

 

Abstract

LinuxisafreeandopensourcecodeintheUnixoperatingsystem,canbemountedinavarietyofcomputerhardwareequipment.Completelyfree,stable,powerfulfeaturestoattractalargenumberofusers.PowerfulfunctionofLinuxthroughthecommandform,i.e.theusermustlearnLinuxprovidedinthecommandaswellasavarietyofoptions,increasedLinuxuserismoredifficulttouseLinux.InordertofacilitatetheuseandmanagementofLinuxsystem,providesthegraphicaluserinterface,systemusesC/Smodel,usingGTKachievegraphicalinterfaceprogramming,realizetheremotemanagementofLinuxofamanagementtool.

ThesystemisimplementedbasedonthemodelofC/S.Intheclient,theoperatinginterfaceismadebytheprogrammingofGTK.Intheserver,thefunctionsoftransferringoffilesoflinuxoperatingsystemareusedtowriteandreadthedataoftheconfigurationfiles.ThecommunicationofclientandserverisimplementedbytheprogrammingofsockTCP.

Themainfunctionsofthesystemincludeaddtion,deletionofusersandgroupsofLinuxoperatingsystemandconfigurationandmanagementoftheserviceofapplicationofthesystem,suchasthethemanagementofbootingservice.

Thispaperisbasedonthesystemdevelopment,studiedthetheoreticalfoundationofthesystem,theoverallarchitectureofthesystem,thespecificdesignofthesystemindetailfromtheperspectiveofsoftwaredesign.

Keywords:

Linux;SystemService;GTK;Socket

目录

1绪论1

1.1本文的研究背景1

1.2本文的研究目的和主要工作1

2GTK编程2

2.1GTK简介2

2.2GTK开发环境的搭建3

2.3GTK构件3

3Linux系统调用6

3.1Linux系统文件6

3.2Linux中文件I/O6

3.3Linux中进程和线程的使用6

4套接口编程8

4.1简介8

4.2socket编程相关的结构体8

4.3socket编程相关的函数9

5程序设计和流程图11

5.1设计思路11

5.2服务器端程序设计12

5.2.1流程设计12

5.2.2服务器端功能模块14

5.3客户端程序设计18

5.3.1客户端设计思路18

5.3.2客户端程序设计18

5.4系统测试26

结论27

参考文献28

致谢29

1绪论

1.1本文的研究背景

Linux是一种自由和开放源码的类Unix操作系统。

Linux作为开源项目的代表,很多大的硬件厂商也支持Linux的发展,由于Linux的稳定性和强大的功能,基于Linux平台的网络服务也在持续的增长。

但是Linux的强大功能是通过命令以及选项的方式提供的,使用者必须记忆较多的命令以及相关选项的功能和作用。

提高了使用的难度,增加了工作量,同时缺乏统一管理和维护Linux中服务的软件[1]。

1.2本文的研究目的和主要工作

本课题是为了给系统管理员提供一种远程管理Linux中某些主要服务的工具软件,完成服务配置管理和查看一些重要数据。

由于Linux是开源项目的代表,对Linux的学习有助于对计算机系统和软件理论知识的提高。

通过该课题的设计与实现,既解决远程管理Linux系统,又让自己掌握了一些Linux系统编程和Socket的编程能力。

本课题主要是对网络配置、GTK库、Linux系统调用和网络编程方面的研究,采用C/S模式,在客户端采用GTK函数实现用户界面的编写,在服务器端通过Linux的系统调用来实现本地服务配置,然后再通过Sock编程来实现服务器和客户端的通信,传递配置内容和服务指令[2]。

2GTK编程

2.1GTK简介

GTK(GIMPToolkit,GIMP工具包)是一套跨多种平台的图形工具包。

按LGPL许可协议发布的。

虽然最初是为GIMP写的,但目前已发展为一个功能强大、设计灵活的通用图形库。

特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面的应用程序的主流开发工具之一。

GTK是一种面向对象式的API(applicationprogramminginterface)。

Glib是GTK+的基础,而这种面向对象的系统正是有glib提供的[3]。

GObject即面向对象的基制可以为GTK+绑定多种开发语言,目前存在的语言有:

C++,Python,Perl,Java,C#,PHP等。

GTK+依赖Glib,Pango,ATK,GDK,GdkPixbuf,Cairo。

Glib是一种通用的函数库。

她提供了各种各样的语言特性,如数据类型,字符串函数,错误通知,消息队列和线程。

Pango是一种函数库,用来实现国际化和本地化的功能。

ATK是一种平易近人的工具函数包,提供快捷服务或为特定人提供电脑服务。

GDK为GTK+图形库系统提供了一些底层的图形实现和窗口实现方法。

在Linux中GDK是位于X服务器和GTK+函数库之间的。

在最近的GTK发行版本中,将更多的功能性函数放在了Cairo函数库中。

GdkPixbuf是加载图像和维护图像缓存的函数库工具包。

Gnome和XFce桌面环境系统均由GTK+编程实现,著名的编程框架SWT和wxWidgets也是由GTK+编程实现的。

最杰出的GTK+软件的代表是Firefox和Inkscape。

GTK+中,运行主循环使用的是gtk_main函数,主要用于监视X服务与GTK程序的连接,退出主循环使用的是gtk_main_quit函数。

GTK+程序中函数的调用是通过信号与事件触发实现的,它的实现机制为:

程序运行在gtk_main()主循环中,某个特定的事件发生,控制权交付给子函数,进而执行这个子函数,实现特定的功能。

另外,在程序编写过程中经常要对回调函数的指针类型进行转换,为此GTK+提供了一种宏定义G_CALLBACK实现,该宏的信息如下:

#defineG_CALLBACK(f)((GCallback)(f))事件是指从X服务器收到的信息流,事件与信号的区别在于:

信号是对象发出的,而事件是在XWindows中发生的动作,如鼠标的移动、点击等。

GTK+构件在接收到发生的事件之后就会发出相应的信号,进而调用回调函数。

事件的回调函数与信号的回调函数是有所区别的,事件的回调函数为:

gintcall_back_func(GtkWidget*widget,GdkEvent*event,gpointercallback_data);

参数event是指向联合类型GdkEvent的指针。

2.2GTK开发环境的搭建

实现远程管理工具的开发,首先要正确的搭建开发环境。

由于系统的设计和实现是在Linux中,而主机使用的Windows系统,所以通过VMwareWorkstation解决这一问题。

VM即virtualmachine,虚拟机是通过软件模拟出来的计算机,也就是逻辑上的计算机。

Host是物理存在的计算机,hostos是host上运行的操作系统。

Guest是虚拟出来的计算机,guestos是虚拟机上运行的操作系统。

Host与guest之间是完全隔离和独立的,它们可以同时运行而互不影响。

对于host来说guest就host下的文件,而在guest里,可以有自己的操作系统和运行自己的应用程序,guest能够实现一台真正的计算机的功能。

Linux系统完全免费,且有较多的版本和类型供使用者选择,系统的开发环境选择redhat5.1,具体的搭建环境的过程是在windowsxp系统中,安装vmware,然后在vmware中安装redhat,在安装redhat中,应注意vmware提供了对redhat的easyinstall,easyinstall不提供个性化的选择和设置,不会安装开发环境,所以选择自己安装,在安装中选中开发所需的包和软件,将GTK的开发环境选上即可。

在系统开发中用到开发工具有GNU的GCC编译器,GDB调试器,VIM编辑器,make工具,pkgconfig,gtk。

gcc是gnu提供gnuccompiler,用于Linux下编译C程序。

gdb是一款功能强大的调试工具,在编译时加上-g选项,就可以运行gdb来调试程序,用来查找程序中的逻辑错误。

在系统中使用了make工具,make是一个方便编译和维护工程的工具,工程通常是由程序文件和头文件,以及其它的相关文件组成,如果通过命令的形式会比较麻烦,并且容易出错,借助于make,可以将文件之间的依赖关系写入Makefile文件中,然后使用make编译和维护,make会自动在当前目录下寻找名为Makefile的文件,然后读取Makefile文件的内容,由文件的更新时间和依赖关系,确定编译的先后次序,并进行编译。

pkgconfig是包配置管理工具,用于在指定的目录中通过.pc结尾文件查找配置gtk使用的库文件,在编译gtk图形程序时用到,通常是在gcc编译命令之后加上

`pkgconfig–cflags–libsgtk+-2.0`,用于加载gtk所需的库文件。

2.3GTK构件

GTK构件可以分为两种。

相关联的GdkWindow窗口和无关联的构件。

大部分构件属于第一种构件,并且可以显示在GdkWindow。

1.GtkWindow构件

GtkWidow构件是最大的容器,是一个窗体构件,只能容纳一个子构件,若要容纳更多的构件必须使用布局控件来布局。

相关的函数:

GtkWidget*gtk_window_new(GtkWindowTypetype);

Gtk_container_add(GTK_CONTAINER(window),widget);

2.组装构件

组装构件通常是直接从GtkContainer派生,这些构件通常有多个子构件,它们的作用是布局管理。

相关的函数:

GtkWidget*gtk_table_new(gintrows,gintcolumns,ginthomogeneous);

voidgtk_table_attach(GtkTable*table,GtkWidget*child,gintleft_attach,

gintright_attach,ginttop_attach,gintbottom_attach,

gintxoptions,gintyoptions,

gintxpadding,gintypadding);

3.按钮构件

GtkButton,按钮构件用于用户点击时执行某个动作。

相关函数:

GtkWidget*gtk_button_new();

GtkWidget*gtk_button_new_with_label(constgchar*label);

GtkWidget*gtk_button_new_with_mnemonic(constgchar*label);

4.文本构件

GtkText允许多行显示或编辑文本。

它支持多种颜色以及多种字体的文本,允许它们以任何需要的形式混合显示,还有许多与Emacs兼容的文本编辑命令。

文本构件支持完全的剪切/粘贴功能,以及双击选择一个单词和单击选择整行的功能。

相关函数:

Gtk_Widget*gtk_text_new(GtkAdjustment*hadj,GtkAdjustment*vadj);

voidgtk_text_set_editable(GtkText*text,ginteditable);

voidgtk_text_insert(GtkText*text,GdkFont*font,GdkColor*fore,GdkColor*back

constchar*chars,gintlength);

5.标签构件

GtkLabel是GTK中最常用的构件之一,没有相关联的X窗口,标签构件不能引发信号。

若需要引发构件,需将其放在一个事件盒构件中,或放在按钮构件中。

相关函数:

voidgtk_label_set_text(GtkLabel*label,char*str);

6.笔记本构件

GtkNotebook是相互重叠的页面集合,每一页都包含不同的信息,且一次只有一个页面是可见的。

该构件在GUI编程中很常用。

要说明大量的相关的信息,同时将它们分开显示,笔记本构件是一种很好的解决方案。

相关函数:

GtkWidget*gtk_notebook_new(void);

voidgtk_notebook_append_page(GtkNotebook*notebook,

GtkWidget*child,

GtkWidget*tab_label);

Voidgtk_notebook_prepend_page(GtkNotebook*notebook

GtkWidget*child,

GtkWidget*tab_label);

7.分栏列表构件

GtkCList是GtkList的替代品,它提供更多的特性。

分栏列表构件是多列列表构件,能处理多达数千行的信息。

每一列可以有一个标题,可以是活动的,也可以将函数绑定到列选择上。

相关函数:

GtkWidget*gtk_clist_new(gintcolumns);

GtkWidget*gtk_clist_new_with_titles(gintcolumns,gchar*titles[]);

创建列表后,用一下函数添加数据行:

gintgtk_clist_prepend(GtkCList*clist,gchar*text[]);

gintgtk_clist_append(GtkCList*clist,gchar*text[]);

用一下函数删除一些数据行:

voidgtk_clist_remove(GtkCList*clist,gintrow);

GtkCList从容器构件派生的,除了容器所具有的一些信号,还有一下附加信号:

select_row:

选中一行时引发,该信号传递信息,依次是GtkCList*clist、gintrow、gintcolumn、GtkEventButton*event.

unselect_row:

用户对一行取消选择,引发这个信号。

传递的次序与上个信号一样。

click_column:

选中某一列时引发,传递信息依次是:

GtkCList*clist、gintcolumn。

回调函数的形式如下:

voidselect_row_callback(GtkWidget*widget,gintrow,gintcolumn,

GdkEventButton*event,gpointerdata);

回调函数用下面的形式连接到信号:

gtk_signal_connect(GTK_OBJECT(clist),”select_row”,

GTK_SIGNAL_FUNC(select_row_callback),NULL);

3Linux系统调用

3.1Linux系统文件

Linux系统中一切皆是文件,输入输出设备也映射为设备文件,所以大多数输入输出都是通过文件读写来实现[4]。

这样屏蔽了底层的差异,从而提供了统一的操作接口。

Linux中常见的文件类型为:

普通文件、目录文件、字符设备文件、块设备文件、符号链接文件等[5]。

很多系统服务和应用服务的配置文件都是以普通文件的实行存在,这些文件很容易通过Linux的系统调用来配置和修改,或者是编写脚本实现相应的功能[6]。

3.2Linux中文件I/O

Linux中提供了两种读取文件的方法:

一种是通过C语言的标准库函数调用来完成;另一种是通过对Linux的系统调用来完成。

Linux系统中可用的文件I/O函数—打开文件、读文件、写文件等等。

大多数Linux文件I/O只需用到5个函数:

open、read、write、lseek、以及close。

Linux系统提供的函数常被称为不带缓存的I/O,不带缓存指的是每个read和write都调用内核中的一个系统调用。

对于内核而言,所有打开的文件都由文件描述符引用。

文件描述符是一个非负整数。

当打开或创建文件时,内核向进程返回一个文件描述符。

读写文件时,用open或creat返回的文件描述符标识该文件,并将其作为参数传送给read或write。

通常使文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符与标准出错输出相结合。

Linux系统调用相关的函数如下:

intopen(constchar*pathname,intoflag,…./*,mode_m*/);

其中第三个参数的数目和类型是可变的,在创建新文件时使用。

ssize_tnumread=read(intfd,void*buf,size_tqty);

ssize_tresut=write(intfd,void*buff,size_tqty);

intresult=close(intfd);

3.3Linux中进程和线程的使用

Linux系统中进程不同于其它系统,很多操作提供了产生进程的机制,在新的进程空间中创建进程,读取可执行文件。

但是Linux不同,它创建的子进程具有和父进程相同的数据、代码段。

父子进程间的区别就是进程的ID不同[7]。

pit_tresult=fork(void);

该函数返回两次函数值,向父进程返回子进程的pid,向子进程返回0。

在使用fork()函数创建进程后,需要父进程等待子进程的结束。

系统调用wait(&status)实现这一功能。

pid_tresult=wait(&status);

linux线程是指基于Linux操作系统下的多线程设计,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。

Linux系统下的多线程遵循POSIX线程接口,称为pthread。

编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

Linux中线程被称为轻量级的进程,同属于一个进程的多个线程使用相同的资源,并且切换所需的空间和时间均远低于进程所需的代价。

创建线程的函数如下:

intpthread_create(pthread_t*thread,

pthread_attr_t*attr,

void*(*func)(void*),

void*arg);

4套接口编程

4.1简介

网络环境中实现计算机的进程之间通信,要用到socket编程,它是用Linux文件描述符和其它程序通信的方式。

Internet常用的有两种套接字类型,StreamSockets(流格式)和DatagramSockets(数据包格式)。

数据包套接字是无连接、不可靠的。

流式套接字是可靠的双向通讯的数据流,有错误控制[8]。

网络环境中传输数据时在传送端先将数据封装,在接收端进行逆操作,然后获取数据。

Linux中模型由应用层,传输层,IP层,数据链路层构成。

图4.1网络示意图

4.2socket编程相关的结构体

Socket编程需要用到特定的数据类型以及其它一些与Internet相关的数据结构,网络字节顺序和本机字节顺序的转换[9]。

socket文件描述符使用int类型描述。

数据传输时使用的是网络字节顺序,为保证系统的可移植性,应通过函数htons()将本机字节顺序转换为网络字节顺序。

其相关函数:

htons()---hosttonetworkshort

htonl()---hosttonetworklong

ntohs()---networktohostshort

ntohl()---networktohostlong

socket用到的第一个结构体是structsockaddr,为许多类型的套接字储存套接字地址信息:

structsockaddr{

unsignedshortsa_family;

charsa_data[14];

};

其中sa_family能够是各种各样的类型,常用的是AF_INET,sa_data包含套接字中的目标地址和端口信息[10]。

为了方便socket编程,与此并列的是另一个结构:

structstructaddr_in{

shortintsin_family;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1