当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ system()用法及代码示例


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 <bits/stdc++.h> 
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()与使用库函数:
system()在Windows操作系统中的一些常见用法是:用于执行暂停命令并使屏幕/终端等待按键的系统(“pause”)和用于使屏幕/终端清晰的系统(“cls”)。

但是,由于以下原因,应避免调用系统命令:

  1. 这是一个非常昂贵且占用大量资源的函数调用
  2. 它不是便携式的:使用system()会使该程序非常不可移植,即,仅适用于在系统级别具有暂停命令的系统,例如DOS或Windows。但不是Linux,MAC OSX和大多数其他软件。

让我们用一个简单的C++代码使用system(“pause”)输出Hello World:

// A C++ program that pauses screen at the end in Windows OS 
#include <iostream> 
using namespace std; 
int main () 
{ 
    cout << "Hello World!" << endl; 
    system("pause"); 
    return 0; 
}

Windows OS中上述程序的输出:

Hello World!
Press any key to continue…

该程序取决于操作系统,并使用以下繁重的步骤。

  • 它挂起您的程序,同时调用操作系统以打开操作系统 shell 。
  • 操作系统找到暂停并分配内存以执行命令。
  • 然后,它重新分配内存,退出操作系统并恢复程序。

除了使用系统(“pause”),我们还可以使用在C /C++中本地定义的函数。

让我们举一个简单的示例,用cin.get()输出Hello World:

// Replacing system() with library function 
#include <iostream> 
#include <cstdlib> 
using namespace std; 
int main () 
{ 
    cout << "Hello World!" << endl; 
    cin.get();  // or getchar() 
    return 0; 
}

该程序的输出为:

 Hello World!

因此,我们看到,系统(“pause”)和cin.get()实际上都在等待按键被按下,但是cin.get()不依赖于操作系统,并且它也不遵循上述步骤来暂停程序。同样,使用C语言,getchar()可用于暂停程序,而无需打印消息“按任意键继续…”。

检查我们是否可以在操作系统中使用system()运行命令的常用方法?
如果我们使用空指针代替命令参数的字符串,则如果命令处理器存在(或系统可以运行),则系统返回非零值。否则返回0。

// C++ program to check if we can run commands using  
// system() 
#include <iostream> 
#include <cstdlib> 
using namespace std; 
int main () 
{ 
    if (system(NULL)) 
       cout << "Command processor exists"; 
    else
       cout << "Command processor doesn't exists"; 
  
    return 0; 
}

请注意,由于大多数在线编译器(包括GeeksforGeeks IDE)都禁用了“系统”命令,因此上述程序可能无法在在线编译器上运行。




注:本文由纯净天空筛选整理自 system() in C/C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。