在命令行运行 希望是这样的 aa是可执行文件 他需要两个参数 ,bb cc
F:\cshiyan>aa bb cc 学了一点C 想了很久也解决不了这个问题
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>/* yuanxing
cmd Param1 ft1 fr1
cmd Param1 ft2 fr2
cmd Param1 ft3 fr3
cmd Param1 ft4 fr4
*/void main(int argc,char *argv[])
{ char cmd[1000] ;
char ft[1000];
char fr[1000];
int i;
if (argc =3)
{strcpy(cmd,argv[1]);
strcpy(ft,argv[2]);
strcpy(fr,argv[3]);
printf("%d\n",argc);
printf("%s\n",cmd);
printf("%s\n",ft);
printf("%s\n",fr);
}for(i=0;i<3;i++)
{
char ftwei[10];
char frwei[10];
char canshu[128]; strcpy(ft,argv[2]);
strcpy(fr,argv[3]); memset(ftwei,0,sizeof(ft));
sprintf(ftwei,"%d.ptc",i);
strcat(ft,ftwei); memset(frwei,0,sizeof(ft));
sprintf(frwei,"%d.ptc",i);
strcat(fr,frwei);//jiehedaoweiba strcpy(cmd,argv[1]);
//printf("%s %s %s\n",cmd,ft,fr); sprintf(canshu,"%s %s",ft,fr);
printf("%s %s\n",cmd ,canshu);
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi; CreateProcess( cmd , canshu ,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) }}
F:\cshiyan>aa bb cc 学了一点C 想了很久也解决不了这个问题
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>/* yuanxing
cmd Param1 ft1 fr1
cmd Param1 ft2 fr2
cmd Param1 ft3 fr3
cmd Param1 ft4 fr4
*/void main(int argc,char *argv[])
{ char cmd[1000] ;
char ft[1000];
char fr[1000];
int i;
if (argc =3)
{strcpy(cmd,argv[1]);
strcpy(ft,argv[2]);
strcpy(fr,argv[3]);
printf("%d\n",argc);
printf("%s\n",cmd);
printf("%s\n",ft);
printf("%s\n",fr);
}for(i=0;i<3;i++)
{
char ftwei[10];
char frwei[10];
char canshu[128]; strcpy(ft,argv[2]);
strcpy(fr,argv[3]); memset(ftwei,0,sizeof(ft));
sprintf(ftwei,"%d.ptc",i);
strcat(ft,ftwei); memset(frwei,0,sizeof(ft));
sprintf(frwei,"%d.ptc",i);
strcat(fr,frwei);//jiehedaoweiba strcpy(cmd,argv[1]);
//printf("%s %s %s\n",cmd,ft,fr); sprintf(canshu,"%s %s",ft,fr);
printf("%s %s\n",cmd ,canshu);
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi; CreateProcess( cmd , canshu ,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) }}
c:\aaa aaa\bbbb.exe
那么就两端加
"c:\aaa aaa\bbbb.exe" aaa "bbb cccc"aaa 是一个参数,
bbb cccc 是一个参数。
PROCESS_INFORMATION pi; CreateProcess( cmd , canshu ,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)后面这三句是想调用 AA 程序执行两个参数BB CC 但是总是想不明白,不知道该如何的折腾。还想一个问题是 如何判断 这个AA 执行完毕 再执行第二次AAAA bb0.ptc cc0.ptc
AA bb1.ptc cc1.ptc
AA bb2.ptc cc2.ptc每执行一次等做完再执行第二个
AA bb1.ptc cc1.ptc做完再执行
AA bb2.ptc cc2.ptc然后就是然后
Windows系统中,几乎所有的HANDLE都可用WaitForSingleObject,WaitForSingleObjectEx,WaitForMultipleObjects,WaitForMultipleObjectsEx
进行等待其信号量。进程结束时进程的句柄会收到这个“信号”。
2:
在以main为程序入口时,各个参数之间是以“空格”为分界符。
系统启动进程后调用main之前会把参数以“空格”为分界符,解析成一个二维数组。
main( int argc, char *argv[ ])的两个参数就是解析后的结束。
但是Windows系统还有一个函数入口
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);
第三个参数就是命令行(由CreateProcess传入的),但这个命令行没有做过解析,是原始的(传入时的样子)。使用时需要自己解析。
3:
另一个你3楼提到的问是C/C++语法问题。这个只要仔细查下就可以了。
1.设置一个全局变量,bool Condition=false;
该变量用于作为开关,如果用户输入的参数命令解析有效合法,为真,
反之为假。
2.独立的开个函数void GetOptions(具体参数,你自己思考);
最好给出参数输入的内容提示。
该函数功能是独立处理解析user输入的参数命令过程,并根据解析结果做出相应的处理。
(可以开一个变量int count=0;每符合一个参数命令串就++,直到解析全部,都符合就将
Condition=真,否则置为假。)
相应处理的内容就是:
如果用户输入的参数命令解析有效合法,Condition为真,
反之Condition为假。
3.主函数Main中调用GetOptions,紧接着
if(!Condition)
{
printf("Bad commands!\n");
return 0;
}具体代码,你自己写好了,我给出的是思路。
void GetOptions(int argc, char* argv[])
{
const char* CmdStr;
int CmdCount,i,j;
char CmdChar,F1Path[256],F2Path[256];
memset(F1Path,0,256);
memset(F2Path,0,256);
int Condition=0;
if(argc==1)
{
fprintf(stderr,"Usage:%s [-O Directory] [-N Directory] [-U Directory] [-C] [-S] \n", argv[0]);
exit(1);
}
for(i=1;i<argc;++i)
{//_access( const char *path, int mode );
////UpdateDb -O E:\Task\Dic_Old\jobs\schema -N E:\Task\jobs\schema -C
////UpdateDb -S
CmdStr=argv[i];
if(CmdStr[0]=='-')
{
CmdCount = strlen(CmdStr)-1;
if(CmdStr[1]=='S' && argc==2)
{
printf("-O Old Object Dictionary File Path.\n"\
"-N New Object Dictionary File Path.\n"\
"-U Update Database According to the Previous Two Valid Path.\n"\
"-C Execute Program to Update Datbase.\n"\
"-S Parameter Usage Explanation.\n");
IsExplanation=true;
break;
}
for(j=0;j<CmdCount;++j)
{
CmdChar=CmdStr[++j];
switch(CmdChar)
{
case 'O':
if((i+1)<argc)
{
strcpy(F1Path,argv[i+1]);
strcat(F1Path,"\\ajobs.dic");
strcpy(F2Path,argv[i+1]);
strcat(F2Path,"\\ajobs.txt");
if(_access(F1Path,0)==0&& _access(F2Path,0)==0)
{
++Condition;
}
}
break;
case 'N':
if((i+1)<argc)
{
strcpy(F1Path,argv[i+1]);
strcat(F1Path,"\\ajobs.dic");
strcpy(F2Path,argv[i+1]);
strcat(F2Path,"\\ajobs.txt");
if(_access(F1Path,0)==0&& _access(F2Path,0)==0)
{
++Condition;
}
}
break;
case 'U':
if((i+1)<argc)
{
strcpy(F1Path,argv[i+1]);
if(_access(F1Path,0)==0)
{
++Condition;
}
}
break;
case 'C':
if(Condition==3)
{
ParameterFlag=true;
}
break;
}
}
}
}
}