C言語の基礎 - インターフェイス

提供:MochiuWiki : SUSE, EC, PCB
2020年4月25日 (土) 11:58時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== コマンドライン引数を利用してプログラムにデータを渡す == コマンドライン引数は、プログラムの実行時に渡される引数の…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

コマンドライン引数を利用してプログラムにデータを渡す

コマンドライン引数は、プログラムの実行時に渡される引数のことである。
例えば、コマンドライン引数を利用できるa.outというプログラムにコマンドライン引数を渡すには、以下のように入力する。

./a.out 引数1 引数2 ... 引数n


コマンドライン引数を受け取るプログラムを記述する場合は、main関数に引数を用意する。
一般に引数は以下の2通りの方法で記述する。

 int main(int argc, char *argv[])
 int main(int argc, char **argv)


以下の例では、コマンドライン引数を利用して、簡易版mvコマンドを作成している。

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(int argc, char *argv[])
 {
    /* コマンドライン引数の数のチェック */
    if ( argc != 3 )
    {
       fprintf(stderr, "引数の数が不正です.\n");
       exit(EXIT_FAILURE);
    }
 
    /* rename 関数でファイルを移動(リネーム)する */
    if ( rename(argv[1], argv[2]) == 0 )
    {
       printf("%sを%sに変更しました.\n", argv[1], argv[2]);
    }
    else
    {
       fprintf(stderr, "%sの変更に失敗しました.\n", argv[1]);
    }
 
    return EXIT_SUCCESS;
 }



リダイレクションを利用してファイルからデータを読み込む

scanf関数やgetchar関数などの標準入力からデータを読み取る関数は、キーボードからデータを入力するが、
リダイレクションを使用することでファイルからデータを入力することができる。

リダイレクションを使用してファイルからデータを読み込むには、コマンドラインから以下のコマンドを実行する。

プログラム名 < ファイル名


以下の例では、リダイレクションを使用して標準入力としてファイルからデータを入力している。

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
    char s[N] = {'\0'};
 
    fgets(s, N, stdin);
    printf("%s\n", s);
 
    return EXIT_SUCCESS;
 }



リダイレクションを利用してファイルにデータを書き込む

printf関数やputchar関数等の標準出力にデータを出力する関数は、ディスプレイにデータを出力するが、
リダイレクションを使用することでファイルにデータを出力することができる。

リダイレクションを利用してファイルにデータを書き込むには、コマンドラインから状況に応じて以下のコマンドを実行する。

コマンド 説明
プログラム名 > ファイル名 標準出力への出力をファイルに上書き
プログラム名 >> ファイル名 標準出力への出力をファイルに追記
プログラム名 > 出力ファイル名 2>&1
または
プログラム名 > 出力ファイル名 &2>1
標準出力と標準エラー出力への出力をファイルに上書き
プログラム名 2> ファイル名 標準エラー出力への出力をファイルに上書き


Linuxの場合は、上記のコマンドに加えて、以下のコマンドが使用できる。(ただし、シェルによっては対応していない場合がある)

コマンド 説明
プログラム名 &> ファイル名 標準出力と標準エラー出力への出力をファイルに上書き
プログラム名 >& ファイル名 標準出力と標準エラー出力への出力をファイルに上書き


 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
    char *s = "Snoopy!";
 
    printf("%s\n", s);
 
    return EXIT_SUCCESS;
 }