当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

C++实现文件更改提醒[VC/C++编程]

赞助商链接



  本文“C++实现文件更改提醒[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

代码以下:
#include <stdio.h>
#include <signal.h>
#include <errno.h>
/*static volatile atomic variable*/
static volatile sig_atomic_t sigflag = 0;
/*private signal control handler*/
static void TurnFlag(int no){
sigflag = (sigflag == 0) ? 1 : 0;
}
/**
* set signal handler
* if error return -1
* or return 0
*/
int InitHandler(int signo){ /*signal macro*/
/*using sigaction function need this struct*/
struct sigaction act;
act.sa_handler = TurnFlag; /*set signal function*/
act.sa_flags = 0;/*meaning sigaction is pure action*/
if( (sigemptyset(&act.sa_mask) == -1) || /*get empty mask*/
(sigaddset(&act.sa_mask,signo) == -1) ||/*add signo into mark*/
(sigaction(signo,&act,NULL) == -1) ) /*execute function*/
return -1;
return 0;
}
/*control signal,main method is suspeed signal and restore signal
* if error return -1,or return 0*/
int ControlSig(int signo){
/*actunblock variable mean no block mask
* actblock variable meaning need to block mask
* actold is original mask for restore
* */
sigset_t actunblock,actblock,actold;
if( (sigprocmask(SIG_SETMASK,NULL,&actunblock) == -1) ||
(sigprocmask(SIG_SETMASK,NULL,&actblock) == -1) ||
(sigaddset(&actblock,signo) == -1) ||
(sigdelset(&actunblock,signo) == -1) ||
(sigprocmask(SIG_BLOCK,&actblock,&actold) == -1) )
return -1;
while(sigflag != 0)
sigsuspend(&actunblock);
if(sigprocmask(SIG_SETMASK,&actold,NULL) == -1)
return -1;
return 0;
}
测试运行

#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
#include "mystring.h"
#include "file.h"
#include "tools.h"
#include "myerror.h"
#include "restart.h"
#include "passwd.h"
#include "sig.h"
int main(int argc,char *argv[]){
static struct stat oldsize,newsize;
const char *filepath = "makefile";
const int sleepn = 2;
int signo = SIGINT;
if(stat(filepath,&oldsize) == -1)
return -1;
for(; ;){
if(InitHandler(signo) == -1){
MyError("init handler error");
return -1;
}
if(ControlSig(signo) == -1){
MyError("control sig error");
return -1;
}
if(stat(filepath,&newsize) == -1)
return -1;
if(newsize.st_size != oldsize.st_size){
oldsize.st_size = newsize.st_size;
fprintf(stderr,"check your file!%sn","07");
}
sleep(sleepn);
}
}


  以上是“C++实现文件更改提醒[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Linux成立ad-hoc实现Wifi同享 近似Connectify功效
  • Windows平台下利用rsync实现文件同步
  • VNC实现多人同享Ubuntu服务器
  • MySQL数据库接口的VC实现与利用(1)
  • MySQL数据库接口的VC实现与利用(2)
  • MySQL数据库接口的VC实现与利用(3)
  • JBuilder+WebLogic实现教材管理系统
  • 通过JDBC实现的透明操纵程序弊端切换
  • 基于Eclipse RCP简化IoC实现
  • Weblogic实施transaction recover碰到的独特问题
  • 用JDBC实现通过APPLET连sql server
  • 学Java-留言板-服务接口的JDBC实现
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .