Linux下,借助inotifywait工具,对文件目录进行监控
2015-01-14 16:25
288 查看
/////////////////////////////////////////////////////
// Name: DataDirMonitor
// Purpose: construct variable
/////////////////////////////////////////////////////
DataDirMonitor::DataDirMonitor(QObject *parent):
QObject(parent)
{
shellProcess = new QProcess();
queue = new QQueue<QByteArray>();
}
/////////////////////////////////////////////////////
// Name: runShellProcess
// Purpose: run QProcess
/////////////////////////////////////////////////////
void DataDirMonitor::runShellProcess()
{
connect(shellProcess, SIGNAL(started()), this, SLOT(start_process()));
connect(shellProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(start_read_output()));
connect(shellProcess, SIGNAL(readyReadStandardError()), this, SLOT(start_read_err()));
connect(shellProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished_process(int,QProcess::ExitStatus)));
//shellProcess->execute(shellPath);
qDebug() << "inotifywait watch start...";
QStringList param;
param << "-mrq" << "--timefmt" << "'%F %T'" << "--format";
param << "'%T %w %e %f'" << "-e" << "create" << "/home/chen/Workspace/temp2/";
shellProcess->start("inotifywait",param);
if(false == shellProcess->waitForStarted())
{
qDebug() << "this process failed to call";
}
}
/////////////////////////////////////////////////////
// Name: start_process
// Purpose: start_process
/////////////////////////////////////////////////////
void DataDirMonitor::start_process()
{
}
/////////////////////////////////////////////////////
// Name: start_read_output
// Purpose: start_read_output
/////////////////////////////////////////////////////
void DataDirMonitor::start_read_output()
{
//读取inotifywait输出的log,对新建的文件信息进行收集
QByteArray output = shellProcess->readAllStandardOutput();
queue->enqueue(output);
}
/////////////////////////////////////////////////////
// Name: start_read_err
// Purpose: start_read_err
/////////////////////////////////////////////////////
void DataDirMonitor::start_read_err()
{
QByteArray err = shellProcess->readAllStandardError();
qDebug() << err;
}
/////////////////////////////////////////////////////
// Name: finished_process
// Purpose: finished_process
/////////////////////////////////////////////////////
void DataDirMonitor::finished_process(int intValue, QProcess::ExitStatus)
{
shellProcess->write("quit");
shellProcess->kill();
if(intValue == QProcess::NormalExit)
{
qDebug() << "NormalExit";
}
}
/////////////////////////////////////////////////////
// Name: ~DataDirMonitor
// Purpose: ~DataDirMonitor
/////////////////////////////////////////////////////
DataDirMonitor::~DataDirMonitor()
{
}
// Name: DataDirMonitor
// Purpose: construct variable
/////////////////////////////////////////////////////
DataDirMonitor::DataDirMonitor(QObject *parent):
QObject(parent)
{
shellProcess = new QProcess();
queue = new QQueue<QByteArray>();
}
/////////////////////////////////////////////////////
// Name: runShellProcess
// Purpose: run QProcess
/////////////////////////////////////////////////////
void DataDirMonitor::runShellProcess()
{
connect(shellProcess, SIGNAL(started()), this, SLOT(start_process()));
connect(shellProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(start_read_output()));
connect(shellProcess, SIGNAL(readyReadStandardError()), this, SLOT(start_read_err()));
connect(shellProcess, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished_process(int,QProcess::ExitStatus)));
//shellProcess->execute(shellPath);
qDebug() << "inotifywait watch start...";
QStringList param;
param << "-mrq" << "--timefmt" << "'%F %T'" << "--format";
param << "'%T %w %e %f'" << "-e" << "create" << "/home/chen/Workspace/temp2/";
shellProcess->start("inotifywait",param);
if(false == shellProcess->waitForStarted())
{
qDebug() << "this process failed to call";
}
}
/////////////////////////////////////////////////////
// Name: start_process
// Purpose: start_process
/////////////////////////////////////////////////////
void DataDirMonitor::start_process()
{
}
/////////////////////////////////////////////////////
// Name: start_read_output
// Purpose: start_read_output
/////////////////////////////////////////////////////
void DataDirMonitor::start_read_output()
{
//读取inotifywait输出的log,对新建的文件信息进行收集
QByteArray output = shellProcess->readAllStandardOutput();
queue->enqueue(output);
}
/////////////////////////////////////////////////////
// Name: start_read_err
// Purpose: start_read_err
/////////////////////////////////////////////////////
void DataDirMonitor::start_read_err()
{
QByteArray err = shellProcess->readAllStandardError();
qDebug() << err;
}
/////////////////////////////////////////////////////
// Name: finished_process
// Purpose: finished_process
/////////////////////////////////////////////////////
void DataDirMonitor::finished_process(int intValue, QProcess::ExitStatus)
{
shellProcess->write("quit");
shellProcess->kill();
if(intValue == QProcess::NormalExit)
{
qDebug() << "NormalExit";
}
}
/////////////////////////////////////////////////////
// Name: ~DataDirMonitor
// Purpose: ~DataDirMonitor
/////////////////////////////////////////////////////
DataDirMonitor::~DataDirMonitor()
{
}
相关文章推荐
- inotifywait命令_Linux inotifywait 命令用法详解:异步文件系统监控机制
- 利用inotifywait监控主机文件和目录
- Linux文件监控工具——inotify-tools
- inotifywait 是一个可以实时监控文件变动的工具
- 利用inotifywait监控主机文件和目录
- linux使用Inotify监控目录或者文件状态变更
- 使用inotify-tools监控Linux下记录文件及目录访问
- linux使用Inotify监控目录或者文件状态变更
- linux使用Inotify监控目录或者文件状态变更
- 利用inotifywait监控主机文件和目录
- inotify-tool基于linux文件和目录的监控
- 通过inotify监控linux文件系统变化
- 安装交叉编译工具,执行arm-linux-gcc –v命令出现提示找不到该文件或目录?解决方法(转)
- 使用inotify-tools监控Linux下网站文件变动情况
- inotify监控linux系统下的目录变化
- C 使用 Inotify 监控目录和文件
- linux下inotify-tools+rsync进行文件同步的使用
- Linux中用CVSNT进行目录、文件的权限设置
- linux 利用find进行批量删除CVS目录和文件的方法
- 如何监控Linux文件系统事件:inotify使用指南(1)