int exec_shell_script(char* fname, LIBSSH2_SESSION *session, LIBSSH2_CHANNEL **channel, int sock) { int rc; if((rc=open_shell(session, channel, sock)) <0) return -1; FILE* cmdfile = fopen(fname, "r"); if(cmdfile == NULL) { printf("open file %s errno: %s\n", fname, strerror(errno)); exit(errno); } char buf[BUFSIZ]; int i; do { fgets(buf, BUFSIZ, cmdfile); if(feof(cmdfile) == 1) break; write_channel(buf, session, *channel, sock); }while(!feof(cmdfile)); strncpy(buf, "\nexit\n", 6); write_channel(buf, session, *channel, sock); read_channel(session, *channel, sock); fclose(cmdfile); // while((rc = libssh2_channel_close(*channel)) == LIBSSH2_ERROR_EAGAIN) waitsocket(sock, session); rc = libssh2_channel_close(*channel); return rc; }
char *getmsg(char *shell) { char *ret = NULL; FILE *fp = NULL; char buf[80] = ""; ret = (char *)malloc(1); //分配时至少分配一个字节大小的空间 if (NULL == ret) { // printf("%s,%d,shl_name:%s,error:%s\n",__FILE__,__LINE__,shell,strerror(errno)); return NULL; } int size = 0,i = 0; fp = open_shell(shell); while (1) { if ((i = fread(buf,1,80,fp)) == 0) break; size += i; ret = (char *)realloc(ret, size); strncat(ret,buf,i); } pclose(fp); return ret; }
//获取返回数据所占内存大小 int getsize(char *cmd) { int i = 0; int size = 0; FILE *fp = NULL; char tmp[512] = ""; fp = open_shell(cmd); while (1) { i = fread(tmp,1,512,fp); if (0 == i) break; size += i; } pclose(fp); return size; }
//获取信息函数,输入为脚本命令,输出为指向堆空间的指针 char *getmsg(char *shell) { char *ret = NULL; FILE *fp = NULL; char buf[80] = ""; int size = getsize(shell); // printf("%s,%d:size = %d\n",__FILE__,__LINE__,size); ret = (char *)malloc(size+1); if (NULL == ret) { printf("%s,%d,shl_name:%s,error:%s\n",__FILE__,__LINE__,shell,strerror(errno)); return NULL; } fp = open_shell(shell); while (fgets(buf,80,fp)) { strncat(ret,buf,strlen(buf)); } pclose(fp); return ret; }
//******************************************************************* // customEvent PRIVATE inherited //******************************************************************* void QBtWorkspace::customEvent( QEvent* const in_event ) { const QBtEvent* const event = dynamic_cast< QBtEvent* >( in_event ); const int type = static_cast<int>( event->type() ); switch( type ) { case QBtEvent::SWITCH_TAB_REQUEST: switch_panels(); break; case QBtEvent::F5_KEY: copy(); break; case QBtEvent::F9_KEY: pack(); break; case QBtEvent::COMPARE_FILES: compare_files(); break; case QBtEvent::COMPARE_DIRS: compare_dirs(); break; case QBtEvent::SYNC_DIRS: sync_dirs(); break; case QBtEvent::JOIN_FILES: join_files(); break; case QBtEvent::DIR_TREE: dir_tree(); break; case QBtEvent::MD5_CREATE: md5_create(); break; case QBtEvent::MD5_CHECK: md5_check(); break; case QBtEvent::DATE_TIME: date_time(); break; case QBtEvent::DROP_FILES: drop_files( event->data(0).toMap() ); break; case QBtEvent::OPEN_OPOSITE: open_oposite(); break; case QBtEvent::OPEN_DIR: open_dir( event->data(0).toString() ); break; case QBtEvent::OPEN_SHELL: open_shell(); break; case QBtEvent::OPEN_TERMINAL: open_terminal(); break; case QBtEvent::OPEN_EDITOR: open_editor(); break; case QBtEvent::EXECUTE: open( event->data(0).toString(), QStringList(), QString() ); break; } }