其中-o选项指定编译后的可执行文件名,-l选项表示使用crypt函数库 步骤7:执行口令检查程序
./passchk –P myshadow –w words –p
其中passchk是可执行文件名,myshadow是口令文件,如果没有-P选项,则缺省使用Linux系统的/etc/shadow文件,words是存放弱口令的口令字典文件,选项-p表示将破解后的口令输出。
实验5
目的:练习Gtk+编程和gcc工具的使用。
需要的知识:C/C++语言的基本技能、第12章gcc的使用与开发、第13章Gtk+图形程序设计;
题目:日志的查询统计是系统管理的一项重要任务。Linux系统的日志以文本文件的形式存在,使用Gtk+编写一个图形界面的系统日志管理器(针对日志文件/var/log/messages*),它可以列出系统当前的日志个数(/var/log/message, /var/log/message.1, /var/log/message.2,……共多少个),对指定的日志文件可以查询哪些条目含有(include)指定信息(比如含有“succeed”的条目),哪些不含有(exclude)指定信息。 图5-1是一个示例程序的效果图:
? 数字1为一个标签,显示日志文件的数量;
? 显示succeed的单行文本框用来输入包含的指定信息; ? 显示kernel的单行文本框用来输入不包含的指定信息;
? 点击标签为“/var/log/messages”的按钮后,可以选择日志文件; ? 点击标签为“View”的按钮后,可以根据输入的条件查看日志内容; 下面的多行文本框用来显示日志内容。
图5-1程序效果图
程序目录结构如图 5- 1所示:
Util.h,Util.cpp core/ LogRecord,LogRecord.cpp LogContent,LogContent.cpp 当前目录./ widgets/ widget.h,widget.cpp main.cpp 图 5- 1程序目录结构图
其中:
? 文件main.cpp:为程序的主函数所在文件,通过对其它文件的调用启动和结束程序; ? 目录core:其中的文件分为三组,每一组的一个.h文件和一个.cpp文件共同定义了一个
类,其中的类名和对应的文件名相同。目录core下定义的类实现了与界面无关的大部分功能。包括:检索日志文件个数、检索和根据条件过滤日志内容等作用。
? 目录widgets:包括两个文件,实现程序界面,并和目录core下的类交互,利用图形界
面接收用户的输入和显示程序的运行结果。 实现步骤:
1) 根据目录结构创建目录和文件;
为了方便组织程序代码,可以将本实验的代码放到单独的目录下。因此,先建立一个目录作为项目的根目录,本例中根目录命名为:ViewLogGtk。
? 在当前工作目录下,建立项目根目录:mkdir ViewLogGtk ? 进入根目录:cd ViewLogGtk
? 创建空白主程序文件:touch main.cpp ? 创建目录core:mkdir core
? 创建目录widgets:mkdir widgets ? 进入目录core:cd core
? 创建目录core下的空白程序文件:
touch Util.h touch Util.cpp
touch LogRecord.h touch LogRecord.cpp touch LogContent.h touch LogContent.cpp
? 进入目录widgets:cd ../widgets
? 创建目录widgets下的空白程序文件:
touch widget.h touch widget.cpp ? 目录文件创建完毕。
Util.h 1 2 3 4 5 6 7 #ifndef UTIL_H #define UTIL_H class Util{ public: static int queryFileCount(const char* dir,const char* keyword); }; #endif 2) 编辑并实现代码文件:这里仅给出关键部分的代码。 Util.h定义了类Util:
类Util中只定义了一个静态的方法:queryFileCount()用来查询指定目录下指定类型的文件个数。其中方法的第一个参数为指定查询文件的目录,第二个参数为指定文件名中包含的字符串。对于本例,第一参数固定的传入字符串“/var/log/”,第二个参数固定的传入字符串“message”,即查询目录/var/log/下文件名中包含message的文件。
LogRecord.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #ifndef LOGRECORD_H #define LOGRECORD_H #include
LogContent.h 1 2 3 4 5 6 7 8 9 #ifndef LOGCONTENT_H #define LOGCONTENT_H #include #include%using namespace std; class LogContent { private: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 string contains; //记录中需要出现的关键字 string notcontains; //记录中不能出现的关键字 string file_name; //记录文件名 list
相关推荐: