这个问题1天了都没有人能回答

时间:2021-04-19 21:55:07
exec...族函数是不是用来调用其他程序的,不要只告诉函数的原形,
函数原形我看了,还是不懂用,我刚学的C。哈哈
我给个例子:比如我要调用d:\chil.exe 这个文件,带有 -t -e -p -m 四个参数,我该怎么用呢,最好给出所有exec族函数调用的例子。
郁闷,我先前都贴了一天了竟然没有能回答,是不是很深奥呀

5 个解决方案

#1


win32下有exec函数么?

#2


是不是要WinExec?
这是我以前封装的一个函数,用到Winexec

//调用windows系统的记事本程序打开一个txt文件
//szTxtFileName :包括txt文件全路径和文件名
BOOL SA_Open_Txt_File(sa_char szTxtFileName[])
{
sa_char *pdot = NULL;
sa_char buf[MAX_PATH+11];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
HWND hNotepadWnd=NULL;

if(szTxtFileName==NULL || szTxtFileName[0] ==0)
{
return FALSE;
}

pdot = strrchr(szTxtFileName,'\\');
if(pdot==NULL)
{
return FALSE;
}
pdot++;

sprintf(buf,"%s - 记事本",pdot);
hNotepadWnd = FindWindow(NULL,buf);
if(hNotepadWnd!=NULL)
{
//txt 文件已打开,关闭它
SendMessage(hNotepadWnd,WM_CLOSE,0,0);
}

hFindFile=FindFirstFile(szTxtFileName,&FindFileData);
if(hFindFile!=INVALID_HANDLE_VALUE)
{
FindClose(hFindFile);
sprintf(buf,"%s %s","notepad.exe",szTxtFileName);
DEG_ASSERT(strlen(buf)<sizeof(buf));
WinExec(buf,SW_SHOW);
return TRUE;
}
else
{
return FALSE;
}
}

#3


后缀中有p的函数,是在由DOS PATH命令指定的目录中搜索子过程,若后缀中没有p,只在当前和根目录中搜索。
后缀中的l指定子过程的参数作为独立的参数传递。当你预先知道所传递的参数时才使用方法。最一个参数必须是NULL
后缀中有v意味着子过程的参数传递以数组形式。当预先知道参数的个数时才使用这个方法。
e表示一个或多个环境字符串将被传到子过程。envp[]参数是一个字符串的指针数组。
例子:
#include<process.h>
#include<stdlib.h>

main()
{
  clsrcr();
  printf("Exec child with arg1,arg2,...\n");
  execl("child.exe","child.exe","arg1","arg2",NULL);
}

#4


diago2007 
我还是不太明白。。你给的例子中clsrcr()是用来做什么的。你看我要调用d:\chil.exe 这个文件,带有 -t -e -p -m 四个参数而且这4个参数我都要用,我是不是应该这样写
#include<process.h>
#include<stdlib.h>

main()
{

printf("Exec child with arg1,arg2,...\n");
execl("d:\child.exe","child.exe","-t","-e c:\windows\...\...exe",NULL);
}

#5


to adreese: clsrcr()是我打错了,不好意思:)(再一次提醒自己,回帖后要检查一下)应该是clrscr()是用来清除用户屏幕的,在这里没什么用处。
至于你给的那个例子好像也不对,你可以把四个参数都写上的。

#1


win32下有exec函数么?

#2


是不是要WinExec?
这是我以前封装的一个函数,用到Winexec

//调用windows系统的记事本程序打开一个txt文件
//szTxtFileName :包括txt文件全路径和文件名
BOOL SA_Open_Txt_File(sa_char szTxtFileName[])
{
sa_char *pdot = NULL;
sa_char buf[MAX_PATH+11];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
HWND hNotepadWnd=NULL;

if(szTxtFileName==NULL || szTxtFileName[0] ==0)
{
return FALSE;
}

pdot = strrchr(szTxtFileName,'\\');
if(pdot==NULL)
{
return FALSE;
}
pdot++;

sprintf(buf,"%s - 记事本",pdot);
hNotepadWnd = FindWindow(NULL,buf);
if(hNotepadWnd!=NULL)
{
//txt 文件已打开,关闭它
SendMessage(hNotepadWnd,WM_CLOSE,0,0);
}

hFindFile=FindFirstFile(szTxtFileName,&FindFileData);
if(hFindFile!=INVALID_HANDLE_VALUE)
{
FindClose(hFindFile);
sprintf(buf,"%s %s","notepad.exe",szTxtFileName);
DEG_ASSERT(strlen(buf)<sizeof(buf));
WinExec(buf,SW_SHOW);
return TRUE;
}
else
{
return FALSE;
}
}

#3


后缀中有p的函数,是在由DOS PATH命令指定的目录中搜索子过程,若后缀中没有p,只在当前和根目录中搜索。
后缀中的l指定子过程的参数作为独立的参数传递。当你预先知道所传递的参数时才使用方法。最一个参数必须是NULL
后缀中有v意味着子过程的参数传递以数组形式。当预先知道参数的个数时才使用这个方法。
e表示一个或多个环境字符串将被传到子过程。envp[]参数是一个字符串的指针数组。
例子:
#include<process.h>
#include<stdlib.h>

main()
{
  clsrcr();
  printf("Exec child with arg1,arg2,...\n");
  execl("child.exe","child.exe","arg1","arg2",NULL);
}

#4


diago2007 
我还是不太明白。。你给的例子中clsrcr()是用来做什么的。你看我要调用d:\chil.exe 这个文件,带有 -t -e -p -m 四个参数而且这4个参数我都要用,我是不是应该这样写
#include<process.h>
#include<stdlib.h>

main()
{

printf("Exec child with arg1,arg2,...\n");
execl("d:\child.exe","child.exe","-t","-e c:\windows\...\...exe",NULL);
}

#5


to adreese: clsrcr()是我打错了,不好意思:)(再一次提醒自己,回帖后要检查一下)应该是clrscr()是用来清除用户屏幕的,在这里没什么用处。
至于你给的那个例子好像也不对,你可以把四个参数都写上的。