Another example of passing an argument to a program
Compiler: Visual C++ Express Edition 2005
Compiled on Platform: Windows Xp Pro SP2
Target platform: none, just for learning and fun
Header file: Standard and Windows
Additional library: none
Additional project setting: Set project to be compiled as C
Project -> your_project_name Properties -> Configuration Properties -> C/C++ -> Advanced -> Compiled As: Compiled as C Code (/TC)
Other info: non-CLR or unmanaged.
To do: Another example of passing an argument to a program
To show: Playing with Windows processes
#include <windows.h>
#include <stdio.h>
#include <process.h>
/* Environment for exec?e */
char *my_env[] =
{
// Just as an example here: NAME=value
"ComSpec=C:\\WINDOWS\\system32\\cmd.exe",
"Path=C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS",
NULL
};
int main(int ac, char* av[])
{
int ret;
// An array pointers...
char *args[3];
/* Arguments for _execv? */
args[0] = av[1];
args[1] = "/D";
args[2] = NULL;
// If command line arguments not properly supplied...
if (ac != 2)
{
fprintf(stderr, "Usage: %s <program_name>.\n", av[0]);
return 0;
}
// We are going to run "mem /D" command, passing the /D....
if ((ret = _execve(av[1], args, my_env)) == -1)
perror("perror says _execve() failed");
return 0;
}
Output example:
(This program run at the command prompt)
F:\vc2005project\crtexecprog\debug>crtexecprog C:\windows\system32\mem
F:\vc2005project\crtexecprog\debug>
Address Name Size Type
------- -------- ------ ------
000000 000400 Interrupt Vector
000400 000100 ROM Communication Area
000500 000200 DOS Communication Area
000700 IO 000370 System Data
CON System Device Driver
AUX System Device Driver
PRN System Device Driver
CLOCK$ System Device Driver
COM1 System Device Driver
LPT1 System Device Driver
LPT2 System Device Driver
LPT3 System Device Driver
COM2 System Device Driver
COM3 System Device Driver
COM4 System Device Driver
000A70 MSDOS 001690 System Data
002100 IO 001FF0 System Data
KBD 000CE0 System Program
HIMEM 0004E0 DEVICE=
XMSXXXX0 Installed Device Driver
000490 FILES=
000090 FCBS=
0000E0 LASTDRIVE=
0007D0 STACKS=
004100 COMMAND 000A20 Program
004B30 MSDOS 000070 -- Free --
004BB0 COMMAND 000180 Environment
004D40 DOSX 0087A0 Program
00D4F0 MEM 0000C0 Environment
00D5C0 MEM 0174E0 Program
024AB0 MSDOS 07B530 -- Free --
09FFF0 SYSTEM 038000 System Program
0D8000 IO 003100 System Data
MOUSE 0030F0 System Program
0DB110 MSDOS 0000A0 -- Free --
0DB1C0 MSCDEXNT 0001D0 Program
0DB3A0 REDIR 000A70 Program
0DBE20 DOSX 000080 Data
0DBEB0 MSDOS 004140 -- Free --
655360 bytes total conventional memory
655360 bytes available to MS-DOS
600608 largest executable program size
1048576 bytes total contiguous extended memory
0 bytes available contiguous extended memory
941056 bytes available XMS memory
MS-DOS resident in High Memory Area