C++与批处理之间的通信(非临时文件)

   用临时文件在C++和批处理间通信相信大家都知道,无非就是一个产生,另一个读取,没什么好说的,来说下不用临时文件的通信。
    先说批处理调用C++然后返回批处理,C++中main函数可以接收外部的参数,其中argc是参数个数,argv是一组字符串类型的参数,argv[0]是当前程序的路径,aggv[1]……是调用程序时的后面跟的第1个~第N个参数;返回批处理时可以用stdout或system向批处理发送返回值,多说无益,看例子吧。
    下面是一个进制转换的C++程序(进制转换.exe):
#include "stdafx.h"
#include "stdlib.h"
#include "string.h"

int main(int argc, char* argv[])
{
 int n=atoi(argv[1]);
 char bin[32]="";
 char str[50]="echo ";
 char input=(argv[2])[0];
 int i=0; 
 switch(input)
 {
 case 'b':while(n!=0){bin[i]=n%2+48;n=n/2;i++;}
 case 'h':while(n!=0){if(n%16<=9)bin[i]=n%16+48;else bin[i]=n%16+55;n=n/16;i++;}
 case 'o':while(n!=0){bin[i]=n%8+48;n=n/8;i++;}
 case 'd':while(n!=0){bin[i]=n%10+48;n=n/10;i++;}
 }
 i=strlen(bin);
 for(int j=0;j<i/2;j++)
 {
  char t=bin[j];
  bin[j]=bin[i-1-j];
        bin[i-1-j]=t;
 }
        fprintf(stdout,"%s\n",bin); 
 memcpy(str+5,bin,i); 
 system(str);
 //fprintf(stdout,"%s\n",argv[0]);
 return 0;
}
    用批处理命令:
进制转换.exe 255 h
pause
    可以看到输出了2个FF,fprintf和system可以任选一个,system的参数必须是完整的批处理指令。
fprintf第一个参数是stdout,第二个参数是格式控制,第三个参数是需要输出的东东。
    有了返回结果就可以在批处理中使用或者输出到文件中了:
进制转换.exe 255 h>0.txt
pause
    很多人都误以为可以利用main函数的返回值通信,实际上main返回的是一个ERRORLEVEL,可以用echo %ERRORLEVEL%看到,ERRORLEVEL只能判断正常退出或异常退出,用处有限。
    再说说C++调用批处理,除了上面说的用system调用批处理命令外还可以使用WinExec或shellexecute
(我学C++不久,只知道这几个),具体自己看MSDN吧,而且批处理能完成的C++绝对能完成,没啥意义。

本文来自:http://www.vc180.com/kaifa/yingyong/1950.html

原文链接: https://www.cnblogs.com/fengji/archive/2010/06/14/1758282.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++与批处理之间的通信(非临时文件)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/11822

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 上午10:34
下一篇 2023年2月7日 上午10:35

相关推荐