Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のsystem()関数とは?使い方と実行例を徹底解説

この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。

system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。

この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。

構文

system()関数の構文は以下の通りです。

int system(char command)

この関数は、コマンドがエラーなく正常に実行された場合に0を返します

使用例1:現在の日付を表示する

入力:system("date")
出力:The current date is: Fri 12/27/2019

解説:この例では、system()関数を使って現在の日付を表示しています。出力はOSのコマンドプロセッサ内に表示されます。このように、system()関数を利用すれば、ターミナルやコマンドプロセッサで通常使うコマンドをプログラムの中から実行できるのです。

使用例2:テキストの色を変更する

入力:system("color a")
出力:(テキストの色が緑色に変化する)

C/C++のsystem()関数とは?使い方と実行例を徹底解説

この例のように、実行したいコマンドを含む文字列をそのままsystem()関数に渡すだけで利用できます。ここでは、コマンドプロセッサ内のテキストの色を変更する「color a」コマンドを指定しており、正しく動作していることが分かります。

プログラムの基本的な手順

コマンドを文字列として扱ってsystem()関数に渡す場合、一般的には以下の手順を踏みます。

  • まず、char型の配列変数を適切なサイズで宣言します。ここではcmd[10]とし、この文字列にコマンドを格納できるようにします。
  • 次に、strcpy()関数を使って、宣言した文字列に目的のコマンドをコピーして格納します。(strcpy()関数を使うには、<string.h>ヘッダーファイルのインクルードが必要です)
  • 最後に、コマンドを格納した文字列をsystem()関数に渡して実行します。

アルゴリズム

開始
ステップ1 → main()関数内で
  char型の cmd[10] を宣言する
  strcpy(cmd, "dir") を呼び出す
  system(cmd) を呼び出す
終了

サンプルコード

#include <iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main() {
    char cmd[10];
    strcpy(cmd,"dir");
    system(cmd);
    return 0;
}

実行結果

上記のコードを実行すると、以下のような出力が得られます。

12/25/2019 10:04 AM <DIR> .
12/25/2019 06:33 AM <DIR> ..
12/24/2019 09:56 AM <DIR> bin
12/25/2019 10:04 AM 183 main.cpp
12/25/2019 10:04 AM 1,564,278 main.exe
12/25/2019 06:33 AM 1,046 main.o
12/24/2019 06:33 AM <DIR> obj
12/24/2019 06:33 AM 1,062 Test.cbp
12/24/2019 06:36 AM 358 Test.layout
5 File(s) 1,566,927 bytes
4 Dir(s) 169,866,692,120 bytes free

ここではsystem()関数に「dir」コマンドを渡しているため、カレントディレクトリに存在するファイルやフォルダの一覧が出力として表示されます。

コマンドプロセッサが利用可能かどうかを確認する方法

オペレーティングシステム上にコマンドプロセッサが存在するかどうかを事前にチェックしたい場合は、次の方法が便利です。

system()関数にNULLポインタを渡すことで確認できます。戻り値が0以外(非ゼロ)であれば、コマンドプロセッサが利用可能であることを意味します。

逆に、戻り値が0であった場合は、コマンドプロセッサが存在しないため、system()関数でコマンドを実行できないことを示しています。

サンプルコード

#include <iostream>
#include<stdlib.h>
using namespace std;
int main() {
    if(system(NULL))
        cout<<"Command Processor is present";
    else
        cout<<"Command processor is not present";
    return 0;
}

このようにsystem()関数を使いこなせば、C/C++のプログラムからOSのコマンドを自由に実行できるようになります。ただし、外部コマンドの実行は環境依存となるため、移植性を考慮する場合は注意が必要です。

  1. C/C++のiswblank()関数とは?使い方とサンプルコードを解説

    iswblank()関数は、引数として渡されたワイド文字が空白文字(ブランク)であるかどうかを判定するための関数です。ここでいう空白文字とは、基本的に半角スペースのことであり、タブ文字(\t)も空白として扱われます。この関数は、C言語ではctype.hヘッダー、C++ではcctypeヘッダーで宣言されています。 iswblank()の構文 int iswblank(wint_t char); 引数には検査対象となるワイド文字を指定します。戻り値は、渡された文字が空白文字であれば0以外の値(真)を返し、空白文字でなければ0(偽)を返します。 iswblank()の使用例 以下は、C++言語におけ

  2. C/C++のiswlower()関数とは?ワイド文字が小文字かどうかを判定する方法

    iswlower()関数とはiswlower()関数は、C/C++に標準で組み込まれているライブラリ関数の一つです。指定されたワイド文字が小文字かどうかを判定するために使用されます。この関数は、C++では「cwctype」ヘッダーファイル、C言語では「ctype.h」ヘッダーファイル内で宣言されています。引数としてワイド文字を1つ受け取り、その文字が小文字であるかどうかに応じて以下の値を返します。小文字の場合:0以外の値(真)を返す小文字でない場合:0(偽)を返すなお、大文字や数字、記号などはすべて「小文字ではない」と判定され、0が返される点に注意してください。構文iswlower()関数の基