OSの命令を実行する関数

 今回はstdlib.hのヘッダファイルをincludeすれば使えるようになる命令の中から、system関数について説明します。system関数は、プログラムを実行するOSのコマンド命令を実行するための関数です。普段からコマンドプロンプト等のコマンドラインツールを利用していない方には縁遠いかもしれません。ただ、何でもかんでもC言語の命令だけで書くよりも、OSのコマンド命令として入っているものを利用した方が早い場合は、system関数を用いてOSのコマンドを利用した方がプログラムの制作が楽になります。

 以下、実行環境がMac(Linux)だとしてサンプルソースをご紹介しますが、Windowsなど他のOSの場合は、コマンド命令を書き換えていただければ実行出来ます。以下のサンプルプログラムを作成し、実行してみて下さい。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    system("pwd");
    system("ls -al");
    
    return 0;
}

 実行すると、以下のような結果が表示されます。

/Users/user/Library/Developer/Xcode/DerivedData/CProject-cqlqtsyagteeohhkurxjwijlyslj/Build/Products/Debug
total 24
drwxr-xr-x  3 user  staff   102 Dec 19 11:17 .
drwxr-xr-x@ 4 user  staff   136 Dec 17 13:59 ..
-rwxr-xr-x  1 user  staff  8920 Dec 19 11:17 CProject

 最初の命令は、実行されているプログラムが格納されているディレクトリ名を表示しています(pwdコマンド)。次に、そのディレクトリに格納されているプログラムの詳細情報を表示しています(lsコマンドにaとlのオプションをつけています)。このようにして、OSのコマンド命令を実行できます。応用例として、実行ファイルを作成しているC言語プログラムがあれば、system関数でその実行ファイルを実行することも出来ます。

 Tips:基本的にはOSのコマンド命令は大体のものがC言語からsystem関数で利用できます。そのため、気をつけないとセキュリティ的に危ないプログラムも作成できてしまいます。例えば、ファイルやディレクトリを削除できるOSコマンド命令も利用できます。悪用すると、大事なファイルを削除してしまったり、場合によってはOSシステム全体がおかしくなる可能性があります。利用には充分注意して下さい。以下のサンプルプログラムは、mkdirコマンドで作成したディレクトリをrmdirコマンドで削除しています。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    system("ls -al");
    system("mkdir abc");
    system("ls -al");
    system("rmdir abc");
    system("ls -al");
    
    return 0;
}

■スポンサーリンク

このページの先頭へ