/ * 文字エンコーディングを取得します* / 書式#include <stdio.hに> する#include <stdlib.h>に含ま / * はcalloc()函数头文件* / 書式#include < 文字列の.h> の#include <assert.h> の#include " uchardet.h " 空テスト() { アウトuchardet_t; const のchar * p型は= " 金星と地球は実際に姉妹惑星ですから始まる。" ; constの char型 * pcCode = NULL; 行う { // 1.初期 UD = uchardet_new()。 // 2.分析サンプル列 IF (uchardet_handle_data(UD、P、strlenを(P))) { printf(" --- uchardet_handle_data()----に失敗しました\ n " ); 破ります; } // サンプル分析閉じ uchardet_data_end(UD)を。 // 4.印刷文字列エンコーディング pcCode = uchardet_get_charset(UD); IF (pcCode) { printf(" ------現在のコードは[%S] ------------ \ nは" 、pcCode)。 } 他 { printf(" --- uchardet_get_charset()----に失敗しました\ n " ); } } ながら(0 )。 // リソース閉じ uchardet_delete(UD)を。 } int型のmain() { テスト(); リターン 0 ; }
/ * コマンドラインパラメータの解析* / する#include <stdio.hに> する#include <STDLIB.H> / * のcalloc()函数头文件* / の#include < 文字列・H> の#include <assert.h> の#include <unistd.h> の#include <のgetopt。 H> / * 知識は加えました: A.コマンドラインパラメータ 「 - 」長いオプションに加えて、パラメータの前に2つの連続したバーのコマンドラインパラメータを2つのカテゴリに分けることができ、一つの選択肢は、短い、一の長いオプション、短いオプションに加えて、パラメータの前にあるバーです「 - 」 例えば-a、-A、-bは短いオプション、と述べている - すべては、 - ほとんど-すべて、--author長いオプションを表明しました。 その後、彼らの両方が選択的にパラメータを追加することができます。例えば--blockサイズ= SIZEため、SIZEは、追加のパラメータです。 B.getopt_long機能紹介 関数原型 INTのgetopt_long([]、CONSTするchar * optstringに、CONST構造体オプション* longoptsの、INT * longindex ARGV INT ARGC、チャー*のCONST)。 機能:のgetopt_long機能を扱うことができ、両方の短いオプションも長いオプションを処理することができます パラメータ説明 ARGC:のメイン()のargc機能付き ARGV:ARGVでmain()関数で optstringに:短いオプション文字列のため。 以下のようなフォーム「:B :: CD:」、それぞれ、ショートプログラムは、コマンドラインオプションは、-a、-b、-c、-d、コロンの次のような意味ですサポートしています。 (1)一つだけの文字は、結腸ことなく、ある - のみよう-cなどのオプション (2)コロン文字は、 - 例えば-a 100として、次のオプションパラメータを取ることを示しています (3)文字二続くコロン - パラメータは、オプションのパラメータ空間を直接-b200いる形態とすることができない場合、すなわちパラメータは、オプションであり、以下のオプションは、オプションのパラメータを取ることを示しています longoptsの:長いオプションの構造を表し、 構造体のオプション { constのchar *名; int型has_arg; int型*フラグ。 int型のval; }。 例えば: 静的構造体オプションlongoptsの[] = { { "デーモン"、no_argument、NULL、 'D'}、 { "DIR"、required_argument、NULL、 'D'}、 { "アウト"、required_argument、NULL、 'O'}、 { "ログ"、required_argument、NULL、 'L'}、 { "スプリット"、required_argument、NULL、 'S'}、 { "HTTPプロキシ"、required_argument、&LOPT、1}、 { "HTTPユーザ"、required_argument、&LOPT、2}、 { "HTTP-passwdの"、required_argument、&LOPT、3}、 { "HTTPプロキシユーザ"、required_argument、&LOPT、4}、 { "HTTPプロキシ-passwdの"、required_argument、&LOPT、5}、 { "HTTP-AUTH-方式"、required_argument、&LOPT、6}、 { "バージョン"、no_argument、NULL、 'V'}、 { "ヘルプ"、no_argument、NULL、 'H'}、 {0、0、0、0} }。 名前:そのようなアウトなどのデーモン、DIR、として、オプションの名前を指定します。 has_arg:オプションパラメータをバック運ぶためにかどうかを示します。 次のようにこのパラメータには、3つの異なる値があります。 A:いつno_argument(またはゼロ)ではなく、パラメータ値を持つパラメータの後、例えば:--version、 - ヘルプ B:required_argument(又は1)、入力パラメータ:(パラメータ値の形式)、または(パラメータ=値)。例えば: - DIR = /ホーム C:optional_argument(又は2)、唯一のパラメータの入力形式である場合:パラメータ値= フラグ:このパラメータが空または空でない2つの値を、持っています。 A:引数がnull NULLの場合、長い時間のオプションに選出された、のgetopt_longはvalの値を返します。例えば、実行可能--help、のgetopt_long戻り値h。 B:パラメータが空でない場合、ヴァルの値に戻る0、フラグポインタパラメータポイントのgetopt_long、長い時間オプションで選択しました。
例:実行--httpプロキシ= 127.0.0.1:80のgetopt_longを0、1、LOPT値の値を返します。 ヴァル:指定された関数は、指定された値のValフラグデータ非空フラグを検索するオプションまたはポイントの値を返すことを示しています。 longindex:非空longindex、それはいくつかの要素の説明において見出さlongoptsのに合わせて現在の変数パラメータのレコードを指し、すなわち、指標値longoptsのです。 戻り値: 短いオプションが発見された場合(1)、その後、短いオプションに対応する文字を返します。 (2)フラグがNULLであれば、長いオプションを見つけるためにする場合は、ヴァルを返します。フラグが空でない場合、0を返します あなたはオプションが発生した場合(3)において文字、文字の短いではありません。または返し長い文字であいまいさがあります「?」 解像度はすべての文字の後に発見されない場合(4)(通常例えば、コマンドパラメータ形式のエラーを入力します。でも、プラスオプションをスラッシュしていない)、「1」に戻ります オプションは引数を必要とする場合(5)、あなたはパラメータを追加するのを忘れ。その最初の文字がある場合、戻り値は、optstringに依存「:」戻り値「:」「」、そうでない場合は? 注意を払います 最後の要素のlongoptsのは、それ以外の場合はエラー・セグメントを報告します、フル充填ゼロでなければなりません ショートオプション各オプションがユニークです。短期および長期のオプションも一意にする必要がある場合。 グローバル変数のC.説明 OPTARG:オプションに対応する現在のパラメータ値を示します。 OPTIND:それはARGVのインデックスの値で処理される次のパラメータを表します。 OPTERR:OPTERR = 0は、getoptの中で、のgetopt_long、getopt_long_onlyエラーが発生した場合意志標準出力ストリームに出力しないエラーメッセージが表示されます。OPTERRとき非ゼロ、画面にエラー出力。 optopt:未確認されていないオプション。 * / int型 LOPT = 0 ; 静的 CONST 構造体オプションlong_options [] = { { " デーモン"、no_argument、NULL、' D ' }、 { " ログ"、required_argument、NULL、' L ' }、 { " HTTPプロキシ"、required_argument、NULL、' P ' }、 { " バージョン"、no_argument、NULL、' V ' }、 { " ヘルプ"、no_argument、NULL、' H ' }、 { 0、0、0、0 } }。 静的 無効使い方(無効) { 関数fprintf(stderrに、 " テスト[オプション] ... URLの\ nは" " -2プログラムを強制終了する\ n " " --daemon使用GETリクエストデーモンを\ nは。" " --log使用ログオプションを\ nは。" " -p | - 。HTTPプロキシを使用するHTTPプロキシ\ n " " -h |この情報--help \ n。" " -V | --version表示プログラムのバージョン\ nは。" ); }。 空show_version() { printf(" ====バージョン[1.1.0] ==== \ n " ); } 空show_help() { printf(" 私はあなたを助けるでしょうが、私は今、家にいないです^ _ ^ \ N。" ); } 無効テスト(int型のargc、char型 ** ARGV) { int型 OPT = 0 ; int型 options_index = 0 ; もし(1 == のargc) { 使用法(); 返します。 } しばらく((OPT =のgetopt_long(のargc、argvの、" 2Vhp:"!、long_options、&options_index))= EOF) { // 短い治療オプションの スイッチ(OPT) { ケース 0 : ブレーク。 ケース ' 2 ' : printf(" 私が今出ています\ N。" ); 破ります; ケース ' V ' : show_version(); 破ります; ケース ' L ' : printf(" 私は、オープンlogオプション[%sの] \ nはしています。" 、OPTARG)。 破ります; ケース ' H ' : show_help(); 破ります; ケース ' P ' : printf(" HTTPプロキシは、[%のS] \ nである。" 、OPTARG)。 破ります; デフォルト: 使用法(); 破ります; } } もし(OPTIND < argcの) { 使用法(); printf(" のgetopt_long()エラー\ nは!" ); } } INT(メインのint ARGC、チャー *のARGV []) { 試験(ARGC、ARGV)。 リターン 0 ; }