h20xx032045_一种远程管理linux系统工具的设计与实现内容摘要:
ist *clist,gint row )。 与其他构件一样, GtkCList有一些信号供我们使用。 GtkCList构件是从容器 构件 GtkContainer派生的,它有容器所具有的一些信号,还有下面这些附加信号: 第 页 共 33 页 5 select_row:选中一行时引发,该信号传递信息,依次是 GtkCList *clist、 gint row、 gint column、 GtkEventButton *event。 unselect_row:用户对一行取消选择,引发这个信号。 传递的信息与上一个 信号一样。 click_column:选中某一列时引发,传递信息,依次是: GtkCList *clist、 gint column。 所以,要将一个回调函数连接到 select_row信号上,回调函数应 该像下面这样: void select_row_callback(GtkWidget *widget,gint row,gint column, GdkEventButton *event,gpointer data)。 回调函数用下面的形式连接到信号: gtk_signal_connect(GTK_OBJECT( clist), select_row, GTK_SIGNAL_FUNC(select_row_callback), NULL)。 以 上只是简单介绍了本课题在客户端界面编写的时候可用到的 GTK库函数, 但实际的 GTK比上面的操作还要复杂得多。 3 Linux 系统调用 Linux 系统文件 在 Linux 中最主要的资源就是文件,很多设备都是以文件形式存在的,所 以大多数输入 /输出都要通过文件读写来实现。 也就是说通过一个单一的接口就 可以处理外围设备和程序之间的通信。 Linux 文件类型常见的有:普通文件、 目录、字符设备文件、块设备文件、符号链接文件等。 很多系统服务和应用服 务的配置文件都是以普通文件的形式存在 ,这些文件很容易通过 Linux 的系统 调用来配置和修改,也可以用文档文件的修改方式来修改。 如何从文件中读取数据 Linux 文件读取有两种方法:一种是通过 C 语言的标准库函数调用来完成; 另一种是通过对 Linux 的系统调用来完成。 文件读取分 3 步完成:第一步是打 开要读取的文件;第二步是把文件读取到内存中去;第三步是关闭打开的文件。 l 在 Linux中打开一个文件可以通过系统调用 open()函数来实现: int fd = open(char *name,int how)。 其中参数 name 是要打开的函数名字; how 是打开的方式;返回值 1 为错误, 成功就返回一个文件描述符。 l Linux系统读取文件内容通过系统调用 read()函数来实现,函数原形: ssize_t numread = read(int fd,void *buff,size_t qty)。 第 页 共 33 页 6 第 1个参数是打开的文件描述符,第 2 个参数是存储文件数据的内存地址, 第 3个参数是读取数据大小。 如果读取成功返回值是读取的字节数,失败就返 回 1。 l 系统调用 write()函数将内存中的数据写入到文件中去,函数原形: ssize_t resut = write(int fd,void *buff,zize_t amt)。 这个系统将调用 buff的数据写到文件中。 第 1个参数是打开的文件描述符; 第 2个参数是要 写入文件数据的内存地址;第 3 个参数是写入文件的大小。 进程不需要再对文件进行读写操作时,就要关系文件打开的文件。 close() 能关闭打开的文件,其函数原形: int result = close(int fd)。 这个系统调用会关闭进程和文件之间的连接。 参数是打开的文件描述符号。 关闭成功返回 0,失败返回 1。 进程和线程的使用 (1) Linux 进程 Linux 进程创建很特别。 很多其他操作都提供了产生进程的机制,在新的 进程空间中创建进程,读取可执行文件。 但是 Linux 不同,它创建的子进程具 有和父进程相同的数据、代码段。 父进程和子进程间的区别就是进程的 pid 不 同,其他的都一样: pid_t result = fork(void) 该函数比较特殊,它返回两次函数值,一次返回值是向父进程返回子进程 的 PID。 还有一次是返回 0(子进程 )。 在使用 fork()函数创建进程的时候经常父进程等待子进程结束。 系统调用 wait(amp。 status)让父进程阻塞直到子进程结束: pid_t result = wait(amp。 status)。 (2) Linux 线程 进程为线程提供了运行环境,多个函数可以同时运行,但是他们都是运行 在相同的进程中的。 pthread_cearte()函数可以创建一个线程: int pthread_ceate(pthread_t *thread, pthread_attr_t *attr, void *(*func)(void*), void *arg)。 4 基本的套接口编程 概述 让同一网络的不同计算机的进程能够相互通信,首先要确定这些程序如何 第 页 共 33 页 7 进行通信。 本课题所用的协议是 TCP/IP 协议。 如果客户和服务器处于同一以太 网,如图 1 所示。 应用层协议 客户应用程序 服务器应用程序 TCP TCP 协议 TCP IP IP 协议 IP 以太网驱动 以太网协议 以太网驱动 图 1 网络示意图 简单的网络编程 (1) socket 函数 socket 函数功能是创建一个套接口描述符,并且指定希望的通信 协议 (使 用 IPV4 的 TCP,或者使用 IPV6 的 UPD 等 )。 int socket(int family,int type,int protocol)。 其中 family 参数指明协议族, type 参数指明套接口类型, protocol 参数 为某个协议的常数。 函数调用成功时候返回一个非负的描述符。 (2) connect 函数 TCP 客户程序用 connect 函数来发起和 TCP 服务程序的连接。 这个函数通 常是在客户程序中使用。 int connect(int sockfd, const sgruct sockaddr *servaddr, socklen_t addrlen)。 sockfd 是有 socket 函数返回的一个套接口描述符,第 2 个和第 3 个参数 分别是一个指向套接口地址结构指针和结构的大小。 当函数调用成功的时候返 回 0,出错就返回 1。 (3) bind 函数 该函数是把一个本地协议地址赋予一个套接口,对于网际协议,协议地址 是一个 32 位的 IPV4 地址和一个 16 位的 TCP 端口号的组合。 int bind(int sockfd,const struct aockaddr *myadd,socklen_t addrlen)。 第 页 共 33 页 8 第 2个参数是一个指向特定协议的地址结构的指针,第 3 个参数是该地址 结构的长度。 调用成功返回 0,错误返回 1。 (4) listen 函数 listen 函数只能由 TCP 服务器调用,他完成两件事: 一是当 socket 函数创建一个套接口时它是一个主动的套接口,该函数就是 把它转换成一个被动的套接口 二是该函数规定了为相应套接口排队的最大的连接个数。 int listen(int sockfd,int backlog)。 本函数通常都是在调用 socket 和 bind 这两个函数之后。 (5) accept 函数 int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen)。 参数 cliaddr 和 addrlen 用来返回已经连接的客户端的协议地址。 函数返 回值为一个非负的描述符表示成功,出错为 1。 这里需要指出的是参数的描述符为监听套接口,就是 在等待连接的时候还 没有建立连接的套接口,而返回值是连接的新的套接口。 也就是能和客户端通 信的套接口。 区分这两个东西是很重要的。 (6)close 函数 套接口编程通常都需要一个 close 函数来关闭套接口 ,来中断 TCP 的连接。 int close(int sockfd)。 (7)send()函数 当连接建立了后自然就需要数据的传送和接收, send()函数是用来想连接 的另外一端发送数据。 int send(int sockfd,void *buf,int len,int flags)。 第 1个参数是已经连接的套接口的描述符,第 2 个参数是发送的数据的内 存地址,第 3 个参数是发送数据的大小,第 4 个参数是选项。 (8)recv()函数 数据发送到接收端了后,就可以用 recv()函数来接收由发送端发送过来的 数据了。 int recv(int sockfd,void *buf,int len,int flags) 第 1个参数是已经连接的套接口的描述符,第 2 个参 数是发送的数据的内 存地址,第 3 个参数是发送数据的大小,第 4 个参数是选项。 第 页 共 33 页 9 5 程序设计和流程图 设计思路 本课题是采用 C/S 模式。 客户程序功能是界面的编写,并和服务程序通信。 采用 GTK 编写界面,采用 Sock 编程实现通信。 服务器程序功能是接收客户程序 的数据,并且通过收到的数据来完成系统或应用服务程序文件的配置。 在 Linux 中服务配置文件主要是以文本文件的形式存在的,所以通过 Linux 系统调用很 容易修改配置文件,流程如图 2。 main() 等待连接 输入服务 器 IP 建立连接( TCP3 次握手) 连接界面 连接 成功 连接不成功 初始化数据 TCP 接口 用户主界面 用户操作 否 TCP 接口 退出 处理 请求 退出 是 结束 结束 图 2 程序总体流程 服务程序 流程设计 服务程序功能有两个:一是监听端口,接收数据和向客户程序发送数据; 二是根据客户程序发送过来的数据对文件修改,其流程图如图 3 所示。 图 3显示了服务程序的流程, accept()是监听端口,等待客户程序的连接, 连接 建立好后 init_cli()函数从配置文件读取服务器的当前配置文件数 据,然后再发送到客户程序,让客户程序通过这些数据来初始化界面。 然后再 接收客户程序的数据 (流程控制字符串 ),通过判断字符串来控制服务程序的流 程 (图 3 中的虚线部分 )。 第 10 页 共 33 页 程序入口 sock() bind() listen() accep() 一直阻塞到 客户连接到 达 连接建立 TCP3 次握 手 init_cli () close () recv () 字符串 对字符 判断处理 判断 user group sysconfig dnsconfig apachecon exit vsftpcon user_control() InitAction () group_control() Apache_Config () Net_DNS_Config () Ftp_Config () 图 3 服务程序的流程图 功能模块 (1) 系统用户管理操作 和客户程序建立了连接,并且收到了 user 字符串后,服务程序进入系统用 户管理操作模块,接着接收客户程序发送过来的数据 (字符串 ),通过数据来判 断是对用户的添加、删除、浏览或修改操作。 接收到了 adduser字符串就进 入添加用户流程;接收到 deluser字符串就进入删除用户流程;接收到 scanuser字符串就进入了浏览用户流程;接收到 property字符串就进 入到了修改用户流程,系统用户管理操作流程如图 4 所示。 第 11 页 共 33 页 user_control() recv()。h20xx032045_一种远程管理linux系统工具的设计与实现
相关推荐
控制工程师报告,延长航空器的停场时间,保证维修工作质量。 记录本次定检工作中的开口项目,按照《 HBMOP04005保留工作项目的管理》、《 HBMOP04018暂缓 修理项目的管理》和《 HBMOP04026非例行工作项目管理》的要求进行处理。 工段组长 各工段组长负责组织人员按照生产计划表的进度进行维修工作,维修工作完成后,按照生产计划表的进度要求,交回已完成的工作单卡和领取新的生产任务
时采取必要的控制、补救措施。 质量管理人员应组织人员对质量事故进行调查、了解并提出处理意见,报企业负责人,必要时上报 兰山区 食品药品监督管理局。 质量管理人员接到事故报告后,应立即前往现场,坚持“三不放过”的原则。 即:事故的原因不清不放 过,事故责任者和员工没有受到教育不放过,没有整改措施不放过。 了解掌握第一手资料,协助各有关部门处理事故,做好善后工作。 德信诚 培训网
质量查询记录,及时解决并给以答复、上报; 8. 负责药品质量信息管理; 9. 负责质量不合格药品报损前的审核,并监督其处理过程与结果; 10.负责退回药品的质量分析,并提出处理意见,并对确定的处理方案进行监督; 11.参与 GSP 自检,并提出整改方案; 12.负责对检验计量工作的指导和检查 三 .主要权力: 1. 对违反质量管理制度和工作程序的 行为有否决权; 19 2.
2G 技术指标要求 (1) 室内覆盖系统的场强不低于室外场强,能保证 95%(主要活动区域)以上设计区域下行信号强度≥ 80dBm,电梯、地下等其它区域信号强度≥ 85dBm; (2) 有玻璃幕墙的建筑物内,为防止信号过度泄漏: 5 层以下可以采用定向吸顶天线; (3) 如果楼宇周边有立交桥、过街天桥,可以根据桥的高度适当增加定向天线的使用楼层; (4) 由不同基站覆盖的相邻楼宇