Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(3) — NEWS-os 4.2.1R

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.2.1R

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