|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh
如今就来理论一下,写一个主动关机的小程序。该程序能够保卫历程的体例运转,当用户在必定工夫(好比30分钟)没有鼠标和键盘操纵后就会主动关机。
这个程序使用了上篇文章中完成的daemonize函数,为程序创立了保卫历程所必要的运转情况。
因为必要同时监听鼠标和键盘操纵,以是必要接纳多线程的体例来完成。个中两个线程分离监督鼠标和键盘,一旦检测到响应举措(鼠标点击和挪动、击键等),全局工夫戳stamp(time_t)就会被设成以后工夫。主线程每隔必定工夫(好比1秒)反省stamp,若以后工夫值(time(NULL))比stamp年夜30*60,则实行停机操纵(利用system函数实行init0命令,大概利用reboot函数)。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>//~O_RDWR,S_IRWXUetc.
#include<pthread.h>
#include<time.h>
#include<limits.h>
#include<signal.h>
voiddaemonize();
//~threadfunctions
void*listen_ms(void*);
void*listen_kb(void*);
//~timestamp,keepingthetime
//~whenthelastKBorMouseeventhappened.
volatiletime_tstamp;
//~mutexkeepingstampconsistent.
pthread_mutex_tstamp_mutex;
int
main()
{
daemonize();
//~initializethemutex,stamp
pthread_mutex_init(&stamp_mutex,NULL);
//time(&stamp);
stamp=time(NULL);
//~createtwothreadsmonitoringtheMouseandKeyboard.
pthread_tms_tid,kb_tid;
if(pthread_create(&ms_tid,NULL,listen_ms,NULL)!=0)
{
perror("pthread_create");
exit(1);
}
if(pthread_create(&kb_tid,NULL,listen_kb,NULL)!=0)
{
perror("pthread_create");
exit(1);
}
unsignedintinterval=60*30;
while(1)
{
sleep(1);
pthread_mutex_lock(&stamp_mutex);
if(time(NULL)-stamp>interval)
{
/*printf("shutdown
");*/
/*fflush(stdin);*/
system("init0");
}
pthread_mutex_unlock(&stamp_mutex);
}
//~jointhethreads,thoughitllneverbeexcuted.
pthread_join(ms_tid,NULL);
pthread_join(kb_tid,NULL);
return0;
}
void*
listen_ms(void*arg)
{
intfd=open("/dev/input/mice",O_RDONLY);
if(fd<0)
{
perror("openmice");
exit(1);
}
charbuf[256];
while(read(fd,buf,sizeof(buf))>0)
{
/*printf("MousedMoved.
");*/
pthread_mutex_lock(&stamp_mutex);
//time(&stamp);
stamp=time(NULL);
pthread_mutex_unlock(&stamp_mutex);
}
close(fd);
}
void*
listen_kb(void*arg)
{
intfd=open("/dev/input/event3",O_RDONLY);
if(fd<0)
{
perror("openevent3");
exit(1);
}
charbuf[256];
</p>12下一页
讨论什么版本好并无意义,关键是你是不是真心想学.不过,为了避免曲高和寡,最好选用的人多的版本。 |
|