日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
GETOPT(3) FreeBSD ライブラリ関数マニュアル GETOPT(3)
名称
getopt -- コマンド行の引数リストからのオプション文字を取得する
ライブラリ
標準 C ライブラリ (libc, -lc)
書式
#include <unistd.h>
extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
extern int optreset;
int
getopt(int argc, char * const argv[], const char *optstring);
解説
getopt() 関数は、コマンド行の引数リスト argv を増加させて解析し、次の既知
のオプション文字を返します。受け付けられたオプション文字 optstring の文字
列で指定されているなら、そのオプション文字は、既知です。
オプション文字列 optstring は、次の要素を含んでいます: 個々の文字とオプ
ション引数を示すためにコロンが後続する文字は、後に続きます。個別の文字に
2 つのコロンが後続するなら、オプション引数は、省略可能です。optarg は、現
在の argv 単語の残りに設定され、または現在の単語にこれ以上文字がなかった
なら、NULL に設定されます。これは、GNU の拡張です。例えば、オプション文字
列 "x" は、オプション ``-x'' を認識し、オプション文字列 "x:" は、オプショ
ンと引数 ``-x argument'' を認識します。それは、続く引数に先導する空白類が
あるなら、getopt() に重要ではありません。
getopt() からの返り時に、optarg は、それが予想されるなら、オプション引数
を指し、変数 optind は、getopt() への続く呼び出しのために次の argv 引数へ
のインデックスを含んでいます。変数 optopt は、getopt() によって返された最
後の既知のオプション文字を保存します。
変数 opterr と optind は、両方とも 1 に初期化されます。optind 変数は、多
かれ少なかれ argv エントリをスキップするために getopt() への一連の呼び出
しの前に、別の値に設定されます。
引数の複数の組を評価するか、または引数の単一の組を複数回評価するために
getopt() を使用するために、変数 optreset は、2 番目と getopt() への呼び出
しの各追加の組の前に、1 に設定されなければなりません、そして変数 optind
は、再初期化されなければなりません。
getopt() 関数は、引数リストが使い果たされるとき、-1 を返します。引数リス
ト中のオプションの解釈は、オプション `--' (2 つのダッシュ) によって取り消
され、これは、getopt() の引数処理の終りの合図となり、-1 を返します。すべ
てのオプションが処理されていたとき、(すなわち、最初のオプションでない引数
まで) getopt() は、-1 を返します。
戻り値
getopt() 関数は、optstring 中の次の既知のオプション文字を返します。
getopt() が optstring で見つけられなかった文字に遭遇するか、または欠けて
いるオプション引数を検出するなら、`?' (疑問符) を返します。optstring に先
導する `:' があるなら、欠けているオプション引数によって、`:' は、`?' の代
わりに返されます。どちらの場合でも、変数 optopt は、エラーを引き起こした
文字に設定されます。getopt() 関数は、引数リストが使い果たされるとき、-1
を返します。
使用例
#include <unistd.h>
int bflag, ch, fd;
bflag = 0;
while ((ch = getopt(argc, argv, "bf:")) != -1) {
switch (ch) {
case 'b':
bflag = 1;
break;
case 'f':
if ((fd = open(optarg, O_RDONLY, 0)) < 0) {
(void)fprintf(stderr,
"myname: %s: %s\n", optarg, strerror(errno));
exit(1);
}
break;
case '?':
default:
usage();
}
}
argc -= optind;
argv += optind;
診断
getopt() 関数が文字列 optstring で見つからない文字に遭遇するか、欠けてい
るオプション引数を検出するなら、それは、stderr にエラーメッセージを書き込
み、`?' を返します。opterr を 0 に設定することは、これらのエラーメッセー
ジを無効にします。optstring に先導する `:' があるなら、失われたオプション
引数によって、`:' は、あらゆるエラーメッセージを抑制することに加えて返さ
れます。
オプション引数は、``-'' で始まることを許可されます。これは、合理的です
が、可能なエラーチェックの量を減らします。
関連項目
getopt(1), getopt_long(3), getsubopt(3)
規格
optreset 変数は、複数回 getopt() 関数を呼び出すことができるように追加され
ました。これは、IEEE Std 1003.2 (``POSIX.2'') 規格の拡張です。
歴史
getopt() 関数は、4.3BSD で登場しました。
バグ
getopt() 関数は、以前に、-1 の代わりに EOF を返すと明示されていました。
<stdio.h> からの getopt() を分断するために、これは、<stdio.h> から
getopt() を切り離すために IEEE Std 1003.2-1992 (``POSIX.2'') によって変更
されました。
単一のダッシュ ``-'' は、optstring の文字として指定されますが、それは、決
してそれに関係している引数があるべきではありません。これによって、
getopt() は、オプションのフラグとして ``-'' を期待するプログラムで使用す
ることができます。このやり方は、間違っていて、あらゆる現在の開発で使用さ
れるべきではありません。それは、後方互換性のためだけに提供されています。
`-' で始まる optstring に異なる意味を割り当てる、GNU getopt() との意味的
な衝突を避けるために optstring の最初の文字として、`-' を使用しないように
注意するべきです。デフォルトで、単一のダッシュによって、getopt() は、-1
を返します。
また、それは、オプション文字として数字を扱うことも可能です。これによっ
て、getopt() は、オプションとして数値 (``-3'') を期待するプログラムで使用
することができます。このやり方は、間違っていて、あらゆる現在の開発で使用
されるべきではありません。それは、後方互換性のためだけに提供されていま
す。次のコードの断片は、ほとんどの場合動作します。
int ch;
long length;
char *p, *ep;
while ((ch = getopt(argc, argv, "0123456789")) != -1)
switch (ch) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
p = argv[optind - 1];
if (p[0] == '-' && p[1] == ch && !p[2]) {
length = ch - '0';
ep = "";
} else if (argv[optind] && argv[optind][1] == ch) {
length = strtol((p = argv[optind] + 1),
&ep, 10);
optind++;
optreset = 1;
} else
usage();
if (*ep != '\0')
errx(EX_USAGE, "illegal number -- %s", p);
break;
}
FreeBSD 13.2 June 5, 2014 FreeBSD 13.2