Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(3) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

GETOPT(3)  —  NEWS-OS Programmer’s Manual

名称

getopt  −  argv からオプション文字を得る

形式

int getopt(argc, argv, optstring)
int argc;
char ∗∗argv;
char ∗optstring; extern char ∗optarg;
extern int optind;

解説

getopt は、 argv の中で optstring の文字にマッチする、 次のオプション文字を返します。 optstring は、 認識されるオプション文字から成る文字列です。 文字の後にコロンが続く場合には、 そのオプションは空白で区切られることもある引数を 1つ持つと見なされます。 getopt からの戻り時に、 optarg はそのオプションの引数の先頭を指すようにセットされます。

getopt は、 次に処理される引数の argv の添え字を、 optind の中に置きます。 optind は外部変数ですから、 普通は getopt の最初の呼び出しの前に、 自動的にゼロに初期化されます。

すべてのオプションが処理されたときには(すなわち、 最初の非オプション引数)、 getopt は EOF を返します。 特別オプションの −− を使用して、 オプションの終わりの境界を 定めることができます。 この場合 EOF が返され、 −− は読み飛ばされます。

診断

getopt はエラーメッセージを stderr 上に出力し、 optstring に含まれていないオプション文字があると、 疑問符 (?) を返します。

例

次のプログラムの一部分は、 コマンドへの引数を 処理する方法を 示しています。 このコマンドは、 互いに排他的なオプションの a および b、 引数を 要求するオプションの f と o を取ります。

main(argc, argv)
int argc;
char ∗∗argv;
{
        int c;
        extern int optind;
        extern char ∗optarg;
        .
        .
        .
        while ((c = getopt(argc, argv, "abf:o:")) != EOF)
                switch (c) {
                case ‘a’:
                        if (bflg)
                                errflg++;
                        else
                                aflg++;
                        break;
                case ‘b’:
                        if (aflg)
                                errflg++;
                        else
                                bproc();
                        break;
                case ‘f’:
                        ifile = optarg;
                        break;
                case ‘o’:
                        ofile = optarg;
                        break;
                case ‘?’:
                default:
                        errflg++;
                        break;
                }
        if (errflg) {
                fprintf(stderr, "Usage: ...");
                exit(2);
        }
        for (; optind < argc; optind++) {
                .
                .
                .
        }
        .
        .
        .
}

履歴

Bell Labs のマニュアルを元に Henry Spencer が書き、 Keith Bostic がさらに System V バージョンに似せて動作するよう修正しました。

バグ

‘−’が単独で現われた場合に、 どう対処するかは不明です。 このバージョンでは、 これを非オプション引数として扱います。 しかし、 この扱いが常に良いわけではありません。

オプションの引数は、 ‘−’で始まります。 これは合理的ですが、 エラー検査の可能性を かなり減少します。

getopt はかなり柔軟ですが、 明らかにその代償もあります。 相互に排他的なオプションの検査、 オプションの引数の型検査 等のように、 やってはいないけれども、 やるべきことはかなりあります。

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026