希望可以将DOS命令行执行的命令结果返回后,进行一定处理,在Windows下可以用管道实现,将其简单包装了下。
具体对应函数是
CreatePipe
http://baike.baidu.com/view/1285858.htm
CreateProcess
http://baike.baidu.com/view/697167.htm#include <windows.h>//初始化字符串指针
char* StringInit()
{char *str= (char*)malloc(1*sizeof(char));memset(str,0,1*sizeof(char));return str;
}//设置字符串为指定字符
char* StringSet(char* str,const char* toset)
{int len=strlen(toset)+1;str= (char*)realloc(str,len*sizeof(char));strcpy (str,toset);return str;
}//在字符串末尾添加指定字符串
char* StringAppent(char* first,const char* last)
{int len=strlen(first)+strlen(last)+1;first = (char*)realloc(first,len*sizeof(char));strcat(first,last);return first;
}//在字符串指定位置添加指定字符串
char* StringInsert(char* str,const char* insert,int start)
{//对开始插入的数字进行验证if(start>strlen(str)){start=strlen(str);}else if (start<0){start=0;}//重新分配内容int pos=strlen(str);int len=strlen(str)+strlen(insert)+1;str= (char*)realloc(str,len*sizeof(char));//使用指针的方式进行遍历int i;//通过倒序方式将准备插入数据后位置的数据复制到最后for(i=1;i<=pos-start;i++){str[len-i-1]=str[len-i-strlen(insert) -1];}//将准备插入的数据插入到开始插入的地方for(i=1;i<=strlen(insert);i++){str[i+start-1]=insert[i-1];}//末尾置0str[len-1]='\0';return str;
}
//通过管道方式获取执行的DOS命令的返回值
char* RunCmd(const char* cmd)
{SECURITY_ATTRIBUTES sa;HANDLE hRead,hWrite;sa.nLength=sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor=NULL;sa.bInheritHandle=TRUE;if (!CreatePipe(&hRead,&hWrite,&sa,0)) {printf("error");return;}STARTUPINFO si;PROCESS_INFORMATION pi;si.cb=sizeof(STARTUPINFO);GetStartupInfo(&si);si.hStdError=hWrite;si.hStdOutput=hWrite;si.wShowWindow=SW_HIDE;si.dwFlags=STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;/* Quick-and-dirty的实现char * runcmd;int len = strlen("c://windows//system32//cmd.exe /c ") + strlen(cmd) + 1;runcmd = (char*)malloc(len*sizeof(char));memset(runcmd,0,len*sizeof(char));sprintf(runcmd,"c://windows//system32//cmd.exe /c %s",cmd); */char* runcmd=StringInit();runcmd=StringSet(runcmd,cmd);runcmd=StringInsert(runcmd,"c://windows//system32//cmd.exe /c ",0);//printf("%s\n",runcmd);if (!CreateProcess(NULL,runcmd,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) {printf("error");return;}CloseHandle(hWrite);char buffer[128]={0};char* result=StringInit();DWORD bytesRead;while (1) {if (ReadFile(hRead,buffer,127,&bytesRead,NULL) ==FALSE)break;result=StringAppent(result,buffer);memset(buffer,0,127);//sleep(1);}return result;}
int main(){char* ttt=StringInit();ttt=StringSet(ttt,"abc");ttt=StringInsert(ttt,"123",0);printf("%s\n",ttt);ttt=StringSet(ttt,"abcde");ttt=StringInsert(ttt,"54321",66);printf("%s\n",ttt);char* p =StringInit();char* cmd=StringInit();cmd=StringSet(cmd,"ipconfig");p =RunCmd(cmd);printf("%s",p);cmd=StringSet(cmd,"ping 202.102.192.68");p =RunCmd(cmd);printf("%s",p);cmd=StringSet(cmd,"dir \"e:\\Documents and Settings\\");p =RunCmd(cmd);printf("%s",p);}

通过管道方式(CreatePipe)获取DOS命令行执行后的返回结果相关推荐

  1. 用dos命令行执行java程序的方法

    今天开始学java了,从图书馆借了一本Deitel公司的书,坑爹的是上面还是用命令行运行java程序,没有用任何ide,鉴于有些初学者可能需要这么运行,写一下方法.首先要安装jdk,然后记住安装路径. ...

  2. 在DOS命令行执行MYSQL语句

    最近有个工作需要从MSSQL库中取数据然后导入SQL 2005.由于之前曾经做过利用BCP导入SQL,因此想借助这个工具实现此功能. 在探索过程中,好像发现MYSQL不能想SQL那样有OSSQL这样的 ...

  3. DOS命令行高级应用

    执行多个命令时,命令这间加&来隔开 if命令及变量基本格式: IF[not]errorlevel数字命令语句如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为"真&qu ...

  4. [AHK]在当前目录中运行DOS命令行--DosHere

    win10中在当前目录中运行DOS命令行的常规办法: 方式1:点击资源管理器地址栏,按Ctrl+L热键,输入cmd. 方式2:按住shift 点击鼠标右键,点选在此处打开Powershell窗口. A ...

  5. java dos编译命令是什么_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是()...

    [单选题]下列行为中,属于绝对商行为的是 [填空题]汽车故障的变化规律可分为3个阶段,早期故障期. 和 . [填空题]无分电器点火线圈与一般点火线圈不同,其 与 没有连接,为互感作用. [简答题]练习 ...

  6. MySQL安装成功后dos命令行设置密码

    我在windows7上安装好MySQL数据库后,添加了MySQL的安装目录D:\wamp\MySQL\bin;到环境变量中,这样就可以在任何目录下使用mysql.为了安全性考虑,需要设置MySQL数据 ...

  7. DOS命令行 定时关机取消定时关机

    DOS命令行 定时关机&取消定时关机 命令行关机命令----shutdown Windows XP的关机是由Shutdown.exe程序来控制的,位于Windows\System32文件夹中. ...

  8. dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...

    [判断题]run方法是运行线程的主体,若run方法运行结束,线程就消亡了 [单选题]在Java 程序中,下面哪个是不合法的标识符() (5.0分) [其它]请提交实验二压缩包 [单选题]在DOS命令行 ...

  9. dos下编写java程序_在DOS命令行状态下,如果命令java Hello成功运行了程序,那么下面哪些叙述是正确的()...

    [判断题]在JDK命令行开发工具中,用编译程序javac.exe编译生成的文件是二进制可执行文件. [论述题]你认为堂吉诃德是一个怎样的人? [简答题]练习函数 [单选题]下列制度体现商法提高交易效率 ...

  10. dos命令行choice命令使用详解

    这篇文章主要介绍了dos命令行choice命令使用介绍,需要的朋友可以参考下 Choice 命令 使用此命令可以让用户输入一个字符,从而运行不同的命令.使用时应该加/c:参数,c:后应写提示可输入的字 ...

最新文章

  1. PTA基础编程题目集-6-3 简单求和
  2. GB0-190 考试中的知识点分布
  3. Cassandra 2016/00
  4. APK加壳【1】初步方案实现详解
  5. ORA-00054 资源正忙,但指定以NOWAIT 方式获取资源,或者超时失效
  6. Docker container与宿主进程相互隔离的实现原理
  7. 浏览器是如何工作的系列:渲染引擎
  8. android+对象池使用,Android开发中对高并发对象池的重复利用
  9. python编程(基于订阅模式的mvc实现)
  10. YII与Ace Admin 的集成
  11. tp框架like模糊查询报错
  12. 微信小程序制作表格代码
  13. 硬件设计-USB2.0电路设计
  14. java 读取xps_java读取带格式word内容
  15. Macbookpro开机只能进入恢复模式后的解决方案(过程太戏剧性了有时间可以看完)
  16. 如何使用Visual Studio查看源代码
  17. 2018 Arab Collegiate Programming Contest (ACPC 2018) G. Greatest Chicken Dish (线段树+GCD)
  18. display-flex详解
  19. java书写开头,JAVA代码书写规范汇总详解
  20. 【面试题】1383- 面试官问:Vue3 对比 Vue2 有哪些变化?

热门文章

  1. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法[已失效]...
  2. 如何将CAD格式转成可以编辑的矢量图
  3. 机器视觉运动控制一体机应用例程|芯片引脚缺陷检测系统
  4. Hive 不支持 where 子句中的子查询, SQL 常用的 exist in 子句需要改写。这一改写相对简单。考虑以下 SQL 查询语句:
  5. Linux | 文件系统 | Ext2fs
  6. mac chrome 重启电脑 插件消失
  7. java小数的数据类型_Java的基本数据类型
  8. 简洁商业计划书PPT模板
  9. 从事汽车电子软件开发需要什么技能?
  10. C语言 —— 符号(C语言的基本符号)