#include "auto_cp.h"
//#include "common.h"
#include <pthread.h>
#include "link_list.c"
int machine_type;
pid_t tmppid=0;
pthread_t ID_beep_thread;
char log_tmp[128];
//for beep
int usb_be_removed; //=1,声音结束
int fail_or_success; //控制声音的频次
int my_system(const char* pCmd, char* pResult, int size);
void waitchild(int signal) {
int state;
wait3(&state, WNOHANG, NULL);
}
int parse_usb(char *result)
{
char *p;
int ret=0;
//printf("[parse_usb]: result=%s.\n",result);
if ((p=strstr(result,"USB Mass Storage device found"))!= 0)
{
printf("[parse_usb]:USB INSERT\n");
ret = INSERT;
}else if ((p=strstr(result,"USB disconnect on device"))!= 0)
{
printf("[parse_usb]:USB REMOVE\n");
ret = REMOVE;
}else if (((p=strstr(result,"> sda: ")) != 0) && (strlen(result) == 14))
{
//printf("[parse_usb]:USB FIND strlen=%d\n",strlen(result));
sprintf(result,"/dev/%s",p+7);
printf("[parse_usb]:USB FIND sda: %s\n",result);
ret = FINDDISK;
}else if (((p=strstr(result,"> sdb: "))!= 0) && (strlen(result) == 14))
{
sprintf(result,"/dev/%s",p+7);
printf("[parse_usb]:USB FIND sdb: %s\n",result);
ret = FINDDISK;
}
return ret;
}
int parse_usb_df(char *result,int usb_stat_old)
{
char *p;
int ret=0;
//printf("[parse_usb_df]: result=%s.\n",result);
if ((p=strstr(result,"USB Mass Storage device found"))!= 0)
{
printf("[parse_usb_df]:USB INSERT\n");
ret = INSERT;
}else if ((strlen(result) == 0) && (usb_stat_old == FINDDISK))
{
printf("[parse_usb_df]:USB REMOVE\n");
ret = REMOVE;
}else if (((p=strstr(result,"/dev/sd")) != 0) && (usb_stat_old != FINDDISK))
{
//printf("[parse_usb_df]:USB FIND strlen=%d\n",strlen(result));
printf("[parse_usb_df]:USB FIND sd: %s\n",result);
ret = FINDDISK;
}
return ret;
}
void * beep_thread(void *Param)
{
time_t star_time = time(0);
while ((!usb_be_removed)&&(time(0) - star_time < 900))
{
if (fail_or_success == USB_HANDLE_FAIL)
{
printf("[beep_thread]:fail......\n");
usleep(100000);
}
else if (fail_or_success == USB_HANDLE_SUCCESS)
{
printf("[beep_thread]:success......\n");
sleep(1);
}
else if (fail_or_success == USB_HANDLE_START)
{
printf("[beep_thread]:start......\n");
sleep(4);
}
printf("\a");
printf("\007");
fprintf(stderr,"%s","\007");
fprintf(stderr,"%s","\a");
}
printf("[beep_thread]:beep end: [%d][2-START|1-SUCCESS|0-FAIL]\n",fail_or_success);
}
beep_usb_handle_end(beep_mode)
{
int retval;
if (ID_beep_thread != 0)
{
pthread_cancel(ID_beep_thread);
pthread_join(ID_beep_thread, NULL);
}
usb_be_removed = 1;
sleep(2);
usb_be_removed = 0;
fail_or_success = beep_mode;
if((retval = pthread_create(&ID_beep_thread, NULL, beep_thread, NULL)) != 0)
{
printf("[beep_usb_handle_end]: Create beep_thread failed.\n");
}else
{
printf("[beep_usb_handle_end]: beep begin :[%d][2-START|1-SUCCESS|0-FAIL]\n",fail_or_success);
}
}
int get_usb_status_df()
{
FILE *fp;
char result[156];
char cmd_tmp[256];
int r_msgid;
int usb_stat,usb_stat_old=0;
// char buf[256];
// struct recv_msg msgbuf;
struct msgqueue r_msgbuf;
if((r_msgid = msgget(MSGKEY_RECVTOMANG/*发给主进程auto_cp的MSG*/, 0)) == -1)
{
perror("[get_usb_status_df]:r_msgid: msgget()");
return -1 ;
}
if(0)
{
printf("[get_usb_status_df]:\n!");
return -1;
}
else
{
while(1)
{
sleep(2);
sprintf(cmd_tmp,"mount /dev/sda10 /mnt/usb >/dev/null 2>&1");
system(cmd_tmp);
sleep(2);
sprintf(cmd_tmp,"fdisk -l | grep -A 0 /dev/sd |grep -v Disk |head -n 1| awk '{print $1}'");
my_system( cmd_tmp,result,56);
sleep(1);
if (0)
{
printf("[get_usb_status_df]:not find usb\n");
}else
{
usleep(1000);
usb_stat=parse_usb_df(result,usb_stat_old);
r_msgbuf.type=1;
printf("[get_usb_status_df]:fgets :%s,[%d][REMOVE=2|FINDDISK=3]\n",result,usb_stat);
if (usb_stat == INSERT)
{//Send msg to Mount process
r_msgbuf.body=INSERT;
if(msgsnd(r_msgid, (struct msg *)&r_msgbuf, sizeof(struct msgqueue),1) == -1)
{
perror("[get_usb_status_df]:sndmsg: INSERT fail\n");
return -1;
}
usleep(500000);
}else if (usb_stat == REMOVE)
{//Send msg to Umount process
usb_stat_old = REMOVE;
r_msgbuf.body=REMOVE;
if(msgsnd(r_msgid, (struct msg *)&r_msgbuf, sizeof(struct msgqueue),1) == -1)
{
printf("[get_usb_status_df]:sndmsg: REMOVE fail\n");
return -1;
}
sleep(5);
}else if (usb_stat == FINDDISK)
{//Send msg to Umount process
usb_stat_old = FINDDISK;
r_msgbuf.body=FINDDISK;
trim(result);
sprintf(r_msgbuf.dev,"%s",result);
if(msgsnd(r_msgid, (struct msg *)&r_msgbuf, sizeof(struct msgqueue),1) == -1)
{
printf("[get_usb_status_df]:sndmsg: FINDDISK fail\n");
return -1;
}
sleep(5);
}
}
}
}
return 0;
}
int get_usb_status_kmsg()
{
FILE *fp;
char result[512];
int r_msgid;
int usb_stat;
// char buf[256];
// struct recv_msg msgbuf;
struct msgqueue r_msgbuf;
if((r_msgid = msgget(MSGKEY_RECVTOMANG/*发给主进程auto_cp的MSG*/, 0)) == -1)
{
perror("[get_usb_status_kmsg]:r_msgid: msgget()");
return -1 ;
}
if((fp=fopen("/proc/kmsg","r"))==NULL)
{
printf("[get_usb_status_kmsg]: open /proc/kmsg fail\n!");
return -1;
}
else
{
// while(!feof(fp))
while(1)
{
//usleep(20000);
if(fgets(result,128,fp) == NULL)
{
printf("[get_usb_status_kmsg]:fgets error ,fp=%d\n",fp);
}else
{
printf("[get_usb_status_kmsg]:fgets :%s\n",result);
//usleep(1000);
usb_stat=parse_usb(result);
r_msgbuf.type=1;
if (usb_stat == INSERT)
{//Send msg to Mount process
printf("[get_usb_status_kmsg]:sndmsg: INSERT \n");
r_msgbuf.body=INSERT;
if(msgsnd(r_msgid, (struct msg *)&r_msgbuf, sizeof(struct msgqueue),1) == -1)
{
perror("[get_usb_status_kmsg]:sndmsg: INSERT fail\n");
return -1;
}
// usleep(500000);
}else if (usb_stat == REMOVE)
{//Send msg to Umount process
r_msgbuf.body=REMOVE;
printf("[get_usb_status_kmsg]:sndmsg: REMOVE \n");
if(msgsnd(r_msgid, (struct msg *)&r_msgbuf, sizeof(struct msgqueue),1) == -1)
{
printf("[get_usb_status_kmsg]:sndmsg: REM
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
src.rar (36个子文件)
src
auto_cp.c 20KB
main.c 399B
common.c 6KB
make.h 116B
auto_cp.h 2KB
mdebug.h 675B
auto_cp.conf 2KB
lib
bomblib.c 2KB
inifile.c 4KB
inifile.h 274B
trim.c 965B
Makefile 574B
.svn
all-wcprops 596B
prop-base
props
tmp
prop-base
props
text-base
text-base
inifile.h.svn-base 274B
bomblib.c.svn-base 2KB
trim.c.svn-base 965B
Makefile.svn-base 574B
inifile.c.svn-base 4KB
entries 962B
format 2B
Makefile 1KB
link_list.c 12KB
.svn
all-wcprops 1KB
prop-base
props
tmp
prop-base
props
text-base
text-base
make.h.svn-base 116B
auto_cp.conf.svn-base 2KB
auto_cp.h.svn-base 2KB
auto_cp.c.svn-base 20KB
mdebug.h.svn-base 675B
main.c.svn-base 399B
common.c.svn-base 6KB
Makefile.svn-base 1KB
Rules.make.svn-base 167B
link_list.c.svn-base 12KB
entries 2KB
format 2B
Rules.make 167B
共 36 条
- 1
sethf
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页