system()用于从C / C++程序调用操作系统命令。
int system(const char *command);
注意:需要包含stdlib.h或cstdlib才能调用系统。
如果操作系统允许,我们可以使用system()执行可以在终端上运行的任何命令。例如,我们可以调用Windows上的system(“ dir”)和system(“ ls”)来列出目录的内容。
编写一个可以编译并运行其他程序的C / C++程序?
我们可以使用system()从程序中调用gcc。参见下面为Linux编写的代码。我们可以轻松地更改代码以在Windows上运行。
// A C++ program that compiles and runs another C++
// program
#include
using namespace std;
int main ()
{
char filename[100];
cout << "Enter file name to compile ";
cin.getline(filename, 100);
// Build command to execute. For example if the input
// file name is a.cpp, then str holds "gcc -o a.out a.cpp"
// Here -o is used to specify executable file name
string str = "gcc ";
str = str + " -o a.out " + filename;
// Convert string to const char * as system requires
// parameter of type const char *
const char *command = str.c_str();
cout << "Compiling file using " << command << endl;
system(command);
cout << "\nRunning file ";
system("./a.out");
return 0;
}
system()与使用库函数:
Windows OS中system()的一些常见用法是:用于执行暂停命令并使屏幕/终端等待按键的system(“ pause”)和用于使系统停止运行的system(“ cls”)。屏幕/终端清除。
但是,由于以下原因,应避免调用系统命令:
- 这是一个非常昂贵且占用大量资源的函数调用
- 它不是可移植的:使用system()使得程序非常不可移植,即,它仅在系统级别具有暂停命令的系统(例如DOS或Windows)上有效。但不是Linux,MAC OSX和大多数其他软件。
让我们以一个简单的C++代码使用system(“ pause”)输出Hello World:
// A C++ program that pauses screen at the end in Windows OS
#include
using namespace std;
int main ()
{
cout << "Hello World!" << endl;
system("pause");
return 0;
}
Windows OS中上述程序的输出:
Hello World!
Press any key to continue…
该程序取决于操作系统,并使用以下繁重的步骤。
- 它会挂起您的程序,同时调用操作系统以打开操作系统外壳。
- 操作系统找到暂停并分配内存以执行命令。
- 然后,它重新分配内存,退出操作系统并恢复程序。
除了使用system(“ pause”),我们还可以使用在C / C++中本地定义的函数。
让我们举一个简单的示例,使用cin.get()输出Hello World:
// Replacing system() with library function
#include
#include
using namespace std;
int main ()
{
cout << "Hello World!" << endl;
cin.get(); // or getchar()
return 0;
}
该程序的输出为:
Hello World!
因此,我们看到, system(“ pause”)和cin.get()实际上都在等待按键被按下,但是cin.get()不依赖于操作系统,也没有遵循上述步骤暂停程序。
同样,使用C语言,可以使用getchar()暂停程序,而无需打印消息“按任意键继续…”。
检查我们是否可以在OS中使用system()运行命令的常用方法?
如果我们使用空指针代替命令参数的字符串,则如果命令处理器存在(或系统可以运行),则系统返回非零值。否则返回0。
// C++ program to check if we can run commands using
// system()
#include
#include
using namespace std;
int main ()
{
if (system(NULL))
cout << "Command processor exists";
else
cout << "Command processor doesn't exists";
return 0;
}
请注意,由于大多数在线编译器(包括GeeksforGeeks IDE)都禁用了“系统”命令,因此上述程序可能无法在在线编译器上运行。