首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

监听已占用串口收发的数据解决办法

2012-12-31 
监听已占用串口收发的数据请教各位一个问题:怎么来获取一个已经被占用串口收发的数据。先谢谢了![解决办法]

监听已占用串口收发的数据
      请教各位一个问题:怎么来获取一个已经被占用串口收发的数据。先谢谢了!
[解决办法]
钩子,勾住readfile
[解决办法]

引用:
portmon我用过了,不过收到的数据显示不方便

编一个小程序处理portmon的log。参考下面
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#define MAXFILES 100
char fn[MAXFILES][80];
FILE *f,*fo,*fi;
char fno[80],tmp[80];
char ln[1024];
char bk[1024];
int n,i,fs,L,k,st,v;
char *p;
//char *t;
void main() {
    system("dir COM3*.log /b >alllog");
    f=fopen("alllog","r");
    if (NULL==f) {printf("Can not open file:alllog\n");return;}
    for (i=0;i<MAXFILES;i++) {
        if (NULL==fgets(fn[i],80,f)) break;
        L=strlen(fn[i]);
        fn[i][L-1]=0;
    }
    fs=i;
    fclose(f);
    for (n=0;n<fs;n++) {
        strcpy(fno,"WR_");
        strcat(fno,fn[n]);
        strcat(fno,".txt");
        if (!access(fno,0)) continue;
        fo=fopen(fno,"w");
        if (NULL==fo) {printf("Can not create file:%s\n",fno);return;}
        fi=fopen(fn[n],"r");
        if (NULL==fi) {printf("Can not open file:%s\n",fn[n]);return;}
        st=0;
        while (1) {
            if (NULL==fgets(ln,1024,fi)) break;//
            switch (st) {
            case 0:
                if (strstr(ln,"\tIRP_MJ_READ")) {
                    fprintf(fo,"%s",ln);
                }
                if (strstr(ln,"\tIRP_MJ_WRITE")) {
                    fprintf(fo,"\n%s",ln);
                    st=1;
                }
            break;
            case 1:
                if (strstr(ln,"\tIRP_MJ_READ")) {
                    L=strlen(ln);


                    ln[L-1]=0;
                    if ('\t'==ln[L-2]) ln[L-2]=0;
                    if (' '==ln[L-3]) ln[L-3]=0;
                    fprintf(fo,"%s",ln);
                    st=2;
                }
                if (strstr(ln,"\tIRP_MJ_WRITE")) {
                    fprintf(fo,"\n%s",ln);
                }
            break;
            case 2:
                if (strstr(ln,"\tIRP_MJ_READ")) {
                    L=strlen(ln);
                    ln[L-1]=0;
                    if ('\t'==ln[L-2]) ln[L-2]=0;
                    if (' '==ln[L-3]) ln[L-3]=0;
                    p=strstr(ln,"Length ");
                    sscanf(p+7,"%d",&v);
                    if (v>0) {
                        sprintf(tmp,"%d",v);
                        k=strlen(tmp);
                        fprintf(fo,"%s",p+7+k+1);
                    }
                }
                if (strstr(ln,"\tIRP_MJ_WRITE")) {
                    fprintf(fo,"\n%s",ln);
                    st=1;
                }
            break;
            }

        }


        fclose(fi);
        fclose(fo);
    }
}

热点排行