static void* thread_monitor(void* args)
{
	pthread_detach(pthread_self());

	int fd;
	int wd;
	int len;
	int nread;
	char buf[BUFSIZ];
	char cmd[256] = {0};
	struct inotify_event *event;
	fd = inotify_init();
	wd = inotify_add_watch(fd,cups_backend, IN_DELETE|IN_MOVED_TO|IN_MOVED_FROM|IN_CREATE);
	if(wd < 0)
	{
        //LOG_ERR("inotify_add_watch failed\n");
		close(fd);
		return NULL;
	}
	while((len = read(fd,buf,sizeof(buf) - 1 )) > 0)
	{
		nread = 0;
		while(len > 0)
		{
			event = (struct inotify_event *)&buf[nread];
			if((event->mask & IN_DELETE) && strcmp("hook_backend",event->name) ==0)
			{
				memset(cmd,0,sizeof(cmd));
				snprintf(cmd,sizeof(cmd),"cp /opt/CEMS/bin/hook_backend %s",cups_backend);
                system(cmd);
                //chmod(full_hook_backend,0500);
			}
			std::set<std::string>::iterator iter;
			iter = device_list.find(event->name);
			std::set<std::string>::const_iterator it;
			for(it=device_list.begin();it!=device_list.end();it++)
			{
				//printAudit_log_run_info((*it).c_str());
				//printAudit_log_run_info(event->name);
			}
			if(((event->mask & IN_DELETE)||(event->mask & IN_MOVED_FROM)||(event->mask & IN_CREATE) )&& iter!=device_list.end())
			{
				memset(cmd,0,sizeof(cmd));
				snprintf(cmd,sizeof(cmd),"%s%s",cups_backend,event->name);
                symlink(full_hook_backend,cmd);
			}
			if((event->mask & IN_MOVED_TO) || ((event->mask & IN_CREATE)))
			{
                //get_backend_info();
				std::set<std::string>::iterator it;
                deal_backend();
				// it = device_list.find(event->name);
				// if(it!= device_list.end())
				// {
				// 	deal_backend();
				// }
			}
			nread = nread + sizeof(struct inotify_event) + event->len;
			len = len - sizeof(struct inotify_event) - event->len;
		}
	}
	inotify_rm_watch(fd,wd);
	close(fd);
	return NULL;
}

  创建线程

bool printer_ctrl_worker()
{
    printer_ctrl_init();
	if(pid_monitor == 0)
	{
		if(pthread_create(&pid_monitor,NULL,thread_monitor,NULL))
		{
			pid_monitor = 0;
		}
	}

	if(!check_hook_backend())
	{
	//chmod(full_hook_backend,0500);
	}

	return true;
}

  

#include <stdlib.h>
#include <vector>
#include <string>
#include <set>
#include <functional>
#include <sys/inotify.h>
#include <string.h>
#include <dirent.h>
#include <list>
#include <sys/stat.h>
#include <time.h>
#include <pthread.h>
#include <signal.h>

linux c 监控目录的更多相关文章

  1. linux 进程监控

    linux 进程监控 supervise Supervise是daemontools的一个工具,可以用来监控管理unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程 ...

  2. linux系统监控常用工具

    linux系统监控常用工具 一.系统核心工具包(coreutils) 1./bin/df 报告系统的磁盘空间用量 df -h  显示磁盘分区fdisk -l 2./bin/uname 显示系统信息 u ...

  3. Linux/Centos笔记目录

        Linux介绍 Linux入门--个人感想 Google怎么用linux 初入Linux Windows XP硬盘安装Ubuntu 12.04双系统图文详解 实例讲解虚拟机3种网络模式(桥接. ...

  4. Linux开源监控平台归总

    Linux开源监控平台归总 Cacti 偏向于基础监控.成图非常漂亮,需要php环境支持,并且需要mysql作为数据存储 Cacti是一个性能广泛的图表和趋势分析工具,可以用来跟踪并几乎可以绘制出任何 ...

  5. Python监控目录和文件变化

    一.os.listdir import os, time path_to_watch = "." before = dict ([(f, None) for f in os.lis ...

  6. Linux系统资源监控--linux命令、nmon和spotlight

    前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录Linux. Linux系统资源监控常用命令及工具 一.常用命令:top.free.iost ...

  7. Linux未来监控tracing框架——eBPF

    Linux未来监控tracing框架--eBPF eBPF源于早年间的成型于 BSD 之上的传统技术 BPF(Berkeley Packet Filter).BPF 的全称是 Berkeley Pac ...

  8. Linux下监控网卡流量的软件Nload

    Linux下监控网卡流量的软件Nload 安装nload: # wget http://www.roland-riegel.de/nload/nload-0.7.2.tar.gz # tar zxvf ...

  9. linux系统监控sar命令

    linux系统监控sar命令详解 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告, 包 ...

随机推荐

  1. Qt 学习之路 2(34):贪吃蛇游戏(4)

    Qt 学习之路 2(34):贪吃蛇游戏(4) 豆子 2012年12月30日 Qt 学习之路 2 73条评论 这将是我们这个稍大一些的示例程序的最后一部分.在本章中,我们将完成GameControlle ...

  2. python学习之路---day008

    文件操作一:文件操作01):文件读取:(r 只读) 001):我们先在当前文件夹内创建txt文件取名为123,在其中添加几句话内容. f 称之为文件句柄,控制着 123 这个文本文档 f=open(& ...

  3. Fountains(非线段树版(主要是不太会用))

    Arkady plays Gardenscapes a lot. Arkady wants to build two new fountains. There are n available foun ...

  4. Fleury算法求欧拉路径

    分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇到问题. 小Ho:小 ...

  5. Tarjan算法打包总结(求强连通分量、割点和Tarjan-LCA)

    目录 Tarjan打包总结(求强连通分量.割点和Tarjan-LCA) 强连通分量&缩点 原理 伪代码 板子(C++) 割点 原理 伪代码 最近公共祖先(LCA) 原理 伪代码 板子 Tarj ...

  6. 【研究】curl测试不安全的HTTP请求

    漏洞名称: 启用了不安全的HTTP方法 安全风险:       可能会在Web 服务器上上载.修改或删除Web 页面.脚本和文件. 可能原因:       Web 服务器或应用程序服务器是以不安全的方 ...

  7. centos7安装nslookup工具、ntp工具

    2018-12-13 centos7安装nslookup工具 yum install bind-utils -y DNS解析localhost到本机 # .检测 [root@node2 ~]# nsl ...

  8. Python 读取Excel数据 xlrd

    #导入相关模块 from xlrd import open_workbook #打开excel file = open_workbook("test.xlsx") #获取sheet ...

  9. 3---Django rest framework源码分析(3)----节流

    Django rest framework源码分析(3)----节流 目录 添加节流 自定义节流的方法  限制60s内只能访问3次 (1)API文件夹下面新建throttle.py,代码如下: # u ...

  10. js动画实现&&回调地狱&&promise

    1. js实现动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...