[英]Turbo C++ system function running an executable
How to run any exe file from turbo c++?如何从turbo C++运行任何exe文件? I know that I should stop using turbo c++ and move one to Dev or Code::Blocks, but my school doesn't agree so I gotta wing it.我知道我应该停止使用 turbo c++ 并将其移至 Dev 或 Code::Blocks,但我的学校不同意,所以我必须对其进行操作。
I just want to know how to run a file with or without the system() function.我只想知道如何使用或不使用 system() 函数来运行文件。 Any kind of advice is welcome欢迎任何形式的建议
Here's what I have tried so far:这是我迄今为止尝试过的:
1 1
#include<process.h>
int main()
{
system("tnfsv13.exe"); //tnfsv being a 16-bit application(The need for slowness v 13)
return 0;
}
2 2
#include<process.h>
int main()
{
system("tnfsv13.bat");
return 0;
}
tnfsv13.bat: tnfsv13.bat:
start "c:\\TurboC3\\BIN\\" tnfsv13.exe启动 "c:\\TurboC3\\BIN\\" tnfsv13.exe
NOTE: Just a doubt, you guys: system() is not working in windows XP.注意:你们有疑问:system() 在 Windows XP 中不起作用。 I tried it using dosbox in windows 7 and it works well, but in XP it does absolutely nothing.我在 Windows 7 中使用 dosbox 进行了尝试,效果很好,但在 XP 中它完全没有任何作用。 Not even the system("dir") command seems to work but system(NULL) returns 1. Any guesses why?甚至 system("dir") 命令似乎都不起作用,但 system(NULL) 返回 1。猜猜为什么?
Thanks.谢谢。
system()
works fine, though it may not work exactly the way you expect: it does the same thing as typing a command at a MSDOS (or Win32) command prompt including input and output being connected to the console. system()
工作正常,尽管它可能不完全按照您的预期工作:它与在 MSDOS(或 Win32)命令提示符下键入命令的作用相同,包括连接到控制台的输入和输出。
If you just want to run a program, pass parameters, and not return from it, use a convenient form from the exec()
family of functions.如果您只想运行一个程序,传递参数,而不是从中返回,请使用exec()
系列函数中的一种方便的形式。 See this for one example.请参阅此示例。
You can also use Turbo C++'s execl()
function.您还可以使用 Turbo C++ 的execl()
函数。 execl()
loads and runs C:\\\\TC\\\\BIN\\\\tnfsv13.exe
. execl()
加载并运行C:\\\\TC\\\\BIN\\\\tnfsv13.exe
。 NULL
means there are no arguments to send to tnfsv13.exe
. NULL
表示没有要发送到tnfsv13.exe
参数。 If an error occurs, execl()
returns -1 into int c
.如果发生错误, execl()
将 -1 返回到int c
。
#include<stdio.h>
#include<process.h>
int main()
{
int c = execl("C:\\TC\\BIN\\tnfsv13.exe", NULL);
return 0;
}
Explanation:解释:
execl() loads and executes a new child process. Because the child
process is placed in the memory currently occupied by the calling
process, there must be sufficient memory to load and execute it.
'pathname' specifies the file name of the child process. If
'pathname' has a file name extension, then only that file is searched
for. If 'pathname' ends with a period (.), then 'pathname' without an
extension is searched for. If that filename is not found, then
".EXE" is appended and execl() searches again. If 'pathname' has no
extension and does not end with a period, then execl() searches for
'pathname' and, if it is not found, appends ".COM" and searches
again. If that is not found, it appends ".EXE" and searches again.
'arg0', 'arg1',...'argn' are passed to the child process as command-
line parameters. A NULL pointer must follow 'argn' to terminate the
list of arguments. 'arg0' must not be NULL, and is usually set to
'pathname'.
The combined length of all the strings forming the argument list
passed to the child process must not exceed 128 bytes. This includes
"n" (for 0-n arguments) space characters (required to separate the
arguments) but does not include the null ('\0') terminating
character.
Returns: If execl() is successful, it does not return to the
calling process. (See the spawn...() routines for a
similar function that can return to the calling
process). If an error occurs, execl() returns -1 to
the calling process. On error, 'errno' (defined in
<errno.h>) is set to one of the following values
(defined in <errno.h>):
E2BIG Argument list or environment list too big.
(List > 128 bytes, or environment > 32k)
EACCES Locking or sharing violation on file.
(MS-DOS 3.0 and later)
EMFILE Too many files open.
ENOENT File or path not found.
ENOEXEC File not executable.
ENOMEM Not enough memory.
Notes: Any file open when an exec call is made remains open
in the child process. This includes
'stdin','stdout', 'stderr', 'stdaux', and 'stdprn'.
The child process acquires the environment of the
calling process.
execl() does not preserve the translation modes of
open files. Use setmode() in the child process to
set the desired translation modes.
See the spawn...() routines for similar though more
flexible functions that can return to the calling
program.
Caution: The file pointers to open buffered files are not
always preserved correctly. The information in the
buffer may be lost.
Signal settings are not preserved. They are reset to
the default in the child process.
-------------------------------- Example --------------------------------- - - - - - - - - - - - - - - - - 例子 - - - - - - - - - ----------------
The following statements transfer execution to the child process
"child.exe" and pass it the three arguments "child", "arg1",
and"arg2":
#include <process.h> /* for 'execl' */
#include <stdio.h> /* for 'printf' and 'NULL' */
#include <errno.h> /* for 'errno', 'ENOENT' and 'ENOMEM' */
main()
{
execl("child.exe", "child", "arg1", "arg2", NULL);
/* only get here on an exec error */
if (errno == ENOENT)
printf("child.exe not found in current directory\n");
else if (errno == ENOMEM)
printf("not enough memory to execute child.exe\n");
else
printf(" error #%d trying to exec child.exe\n", errno);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.