DMS-linux系统用户登入/登出记录系统

概述:从linux系统中记录用户登入登出的文件中,读取数据,整理用户登入和登出的时间,和在线的时长,最后写入到oracle数据库。整个程序由客户端和服务端组成。客户端部署在客户机上,用于采集客户机上用户的登入登出信息。服务端部署在可以连接到oracle数据库的主机上,用于整理数据,和向数据库插入数据。
涉及到的知识点:
socket网络编程
动态库的制作
Makefile文件制作
proc

流程描述:
客户端程序,通过操作utmp文件的一套库函数,从/var/log/wtmp文件中逐个读取记录。筛选出用户登入和登出记录,分别保存到登入和登出的链表中。
读取完毕之后,根据登出的链表的每一个记录中的pid信息到登入的链表中寻找对应的登入记录。如果找不到,说明这个登出记录无效,直接从链表中删除;如果找到了对应的登入记录,则将这一对登入和登出信息封装成一个自定义的信息类,包含用户名,用户登入时间,用户登出时间,在线时间,将其插入到自定义类链表中。并将这一对信息,从登入和登出链表中弹出。
在采集数据时,很有可能客户机上还有用户处于在线状态,仅生成了一条登入的记录,没有登出数据。对于这些数据,将会被保存在文件中,下一次客户端程序运行时会被加入到登入的队列中,参与下一次的匹配。
通过socket函数,建立TCP协议的通信,将数据发送到服务端。如果服务端不可达,或者其他原因而导致发送失败,客户端会将数据写入到一个文件中,在下一次发送时将先加载这些发送失败的数据,一起发送。
服务端:
收到客户端的信息之后,对数据进行处理,例如,将登入登出的时间转换成oracle的date类型。然后链接数据,向数据库表中插入这些信息。服务端的接收信息和插入数据库两个动作是放在两个线程中的,两个线程共同维护一条队列,采用生产者-消费者模式。

源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值