📄 conncli.c
字号:
#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <stdlib.h>
#include "atmi.h"
#include "fml32.h"
#include "myfml.h"
FBFR32 *sendbuf=NULL;
char *rcvbuf;
char *filebuf;
FILE *fp;
log(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
vfprintf(stdout, fmt, ap);
fflush(stdout);
va_end(ap);
fclose(fp);
tpfree((char *)sendbuf);
tpfree((char *)rcvbuf);
free(filebuf);
tpterm();
exit(1);
}
#if defined(__STDC__) || defined(__cplusplus)
main(int argc, char *argv[])
#else
main(argc, argv)
int argc;
char *argv[];
#endif
{
long rcvlen=1000,filelen,i;
long sendlen;
int ret;
long reallen;
long bnum,bsize=1024;
struct timeb start,end;
long timesum=0;
FLDLEN32 len=0;
char *size;
long cd;
long revent;
long fail=0;
/*size = (char *)getenv("BLOCK_SIZE");
if (size == NULL)
bsize=10;
else
bsize=atoi(size);
printf("bsize=%ld\n",bsize);
*/
if(argc != 2)
{
(void) fprintf(stderr, "Usage: %s filename\n",argv[0]);
exit(1);
}
ftime(&start);
fp = fopen( argv[1], "rb" );
if(fp == NULL)
{
printf("open file:%s failure\n",argv[1]);
exit(1);
}
if(fseek(fp, 0, SEEK_END)!=0)
{
perror("fseek() failure:");
exit(1);
}
filelen=ftell(fp);
rewind(fp);
sendlen=filelen + 100;//???
if((sendbuf = (FBFR32 *)tpalloc("FML32", NULL, sendlen)) == (FBFR32 *)NULL)
{
printf("Error allocating send buffer\n");
exit(1);
}
len = Fsizeof32(sendbuf);
if(Finit32(sendbuf, (FLDLEN32)len)== -1)
{
printf("finit32() failure\n");
exit(1);
}
if((rcvbuf = (char *) tpalloc("STRING", NULL, rcvlen)) == NULL)
{
printf("Error allocating receive buffer\n");
exit(1);
}
filebuf=(char *)malloc(bsize);
if(filebuf == NULL)
{
printf("malloc(filebuf) failure");
exit(1);
}
bnum=(filelen -1)/bsize + 1;
if(Fchg32( sendbuf, FNAME, 0, argv[1], (FLDLEN32)len )<0)
{
log("Fchg32(FNAME) failure\n",Fstrerror32(Ferror32));
}
if(Fchg32( sendbuf, BNUM, 0, (char *)&bnum, (FLDLEN32)len )<0)
{
log("Fchg32(BNUM) failure\n",Fstrerror32(Ferror32));
}
printf("filelen = %ld, block num = %ld\n",filelen,bnum);
i=-1;
if(Fchg32(sendbuf, BID, 0, (char *)&i, 0)<0)
{
log("Fchg32(BID) failure:%s\n",Fstrerror32(Ferror32));
}
printf("bid=%ld\n",i);
if (cd = tpconnect("CONN",NULL,0,TPSENDONLY )==-1)
{
printf("tpconnect: %s\n",tpstrerror(tperrno));
exit(1);
}
else
printf("connect sucessful\n");
if (tpsend(cd,sendbuf,0,TPRECVONLY,&revent)==-1)
{
printf("**tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
exit(1);
}
if (tprecv(cd,&rcvbuf,&rcvlen,0,&revent)==-1)
printf("tprecv():,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
i=atol(rcvbuf);
printf("get id=%ld\n",i);
if(i==bnum-1)
{
log("the file have been transfered\n");
exit(1);
}
/*neednot to send the those record again*/
//Finit32(sendbuf,sendlen);
while(i<bnum)
{
while(fail)
{
if (cd = tpconnect("CONN",NULL,0,TPSENDONLY)==-1)
{
printf("re tpconnect: %s\n",tpstrerror(tperrno));
continue;
}
else
{
printf("re connect sucessful\n");
fail=0;
break;
}
}
if(fseek(fp, i*bsize, 0)!=0)
{
log("fseek failure\n");
}
reallen=fread(filebuf, 1, bsize, fp);
if(reallen!=bsize && feof(fp)==0 )
{
log("fread() failure\n");
}
if(Fchg32(sendbuf, BID, 0, (char *)&i, 0)<0)
{
log("Fchg32(BID) failure:%s\n",Fstrerror32(Ferror32));
}
printf("bid=%ld\n",i);
if(Fchg32( sendbuf, FDATA, 0, filebuf, (FLDLEN32)reallen)<0)
{
log("Fchg32(FDATA) failure:%s\n",Fstrerror32(Ferror32));
}
if(i == bnum - 1)
{
if (tpsend(cd,sendbuf,0,TPRECVONLY,&revent)==-1)
{
printf("tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
if(revent !=TPEV_SENDONLY) fail=1;
continue;
}
}
else
{
if (tpsend(cd,sendbuf,0,TPNOBLOCK,&revent)==-1)
{
printf("tpsend():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
if(revent !=TPEV_SENDONLY) fail=1;
continue;
}
}
i++;
}
if (tprecv(cd,&sendbuf,&rcvlen,0,&revent)==-1)
printf("!!!tprecv():failule,revent=%ld,strerr=%s\n",revent,tpstrerror(tperrno));
else
printf("tprecv() ok*********\n");
if(tpdiscon(cd)==-1)
printf("tpdiscon():%s\n",tpstrerror(tperrno));
else
printf("tpdiscon() success\n");
ftime(&end);
timesum=end.time*1000+end.millitm-start.time*1000-start.millitm;
if (timesum!=0)
printf("/cost time %ld(ms), speed=%ld(ms)\n", timesum,filelen/timesum);
log("finished\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -