I ♥ WordPress

Mac にインストールしているアプリ 2009年2月版
2009/02/16 02:12 posted by kunkichi

訳あってちょっとメモ。

フリーウェア・シェアウェア

  • Firefox ・・・ ブラウザ
  • SafariStand ・・・ Safari拡張ツール
  • Parallels ・・・ 仮想環境
  • iTerm ・・・ ターミナル
  • CyberDuck ・・・ FTP/SFTP
  • CotEditor ・・・ エディタ
  • ImageWell ・・・ 画像加工ツール
  • Adium ・・・ チャット
  • Skype
  • RealPlayer ・・・ 動画再生
  • SmartReporter ・・・ HDD監視ツール
  • iStat Menus ・・・ 各種監視ツール
  • HandBrake ・・・ 動画エンコーダ
  • Dropbox ・・・ オンラインストレージ
  • Growl ・・・ 通知ツール
  • Flip4Mac ・・・ WMVコーデック
  • Perian ・・・ 各種コーデック
  • iBackup ・・・ バックアップ
  • SlimBatteryMonitor ・・・ バッテリ監視ツール
  • SnapNDrag ・・・ デスクトップキャプチャ
  • Paparazzi ・・・ Webページキャプチャ
  • HardwareGrowler ・・・ ハードウェア情報をGrowlで通知
  • SpaceSuit ・・・ Spacesの背景を切り替えるツール

商用ソフトウェア

  • iWorks
  • iLife
  • Parallels ・・・ 仮想化ソフトウェア

Core2Quad Q9550買ってきた。
2009/02/15 01:58 posted by kunkichi

お蔵になってる ML110 G5 に乗せてみる予定。動くのか?

Q9550s は動くらしいので、多分大丈夫なのではないかと思ってるのだけど、あっちはまだちょい高いかな。

2009/03/30追記
Q9550動きました。
ただし、うちのML110G5の場合、BIOSのファームウェアのバージョンが古くて、最初はファンが全開で回ってたのですが、こちらはファームウェアをバージョンアップしたところ、改善しました。思いのほか静かでいい感じです。

最近のWindows PCについて
2009/02/15 01:55 posted by kunkichi

ちょっと衝撃的だったので、エントリ。

うちの家族がPCを買いました。機種はVAIO。あと、無線LANやらプリンタやらも、一通り買ったので、今日はそのセットアップ作業員と化してました。

で、個人的に初Vistaだったのですが、感想としては、

普通の人間が普通の神経で使える道具じゃないです。

もうねぇ、何がどこにあるか全然ピンとこないし、設定一つとっても、妙に親切だったり、逆にそうじゃなかったり、っていうレベルが統一されてないし、、、ウィジェットもいらねぇ、、、

最近の若い子はこんなのガンガン使いこなしてる訳?単に僕がオールドタイプなだけ?ってかこれ使いこなせるってある意味すごいよ、、、

あとね、昔からメーカー製PCってそうなのだけど、プリインストールされてるアプリ多すぎ。最初から常駐しまくってて、起動時に山ほど初期設定しないといけない、ってそれだけで萎える。

しかも、VAIOの場合、OSの標準機能をラップしてあるようなアプリが動いてて、これがまたわかりにくい。

なんていうかね、ほんとうに、

これ、マジで売るつもりなの?

とまで思った、衝撃的な一日でした。

[時間割:Perl]『ミニマルPerl』その19
2009/02/13 02:08 posted by kunkichi

木曜日は「Perl」です。引き続き、組み込み関数いろいろ。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • chomp
    • おなじみchomp。これまでは-n や -p に併せて -l オプションを使ってきたので自動的にchompしていたようなもの。
    • ただし、以下のような場合は、-lオプションが聞かないのでchompしないとダメ。$input = <STDIN>;ユーザからの入力内容を標準入力で受け付けるような場合は、最後の改行をchompしてやる必要がある。
    • 配列をchompすると、すべての要素に対してchompできる。
    • chomp の引数に「複数」の引数を指定する場合は、()が「必要」。chomp ( $a, $b );
  • rand
    • 乱数生成。引数なしだと、1以下のものすごく細かい浮動小数点数を返す。$ perl -w -e '$num = rand; print $num;'
      0.179432431775243;
    • 普段はここまではいらないので、引数で倍率を指定する。100だと、100以下の浮動小数点数ということになるので、多少大きくなる。$ perl -w -e '$num = rand 100; print 97.8164008892239
    • 整数で計算したければ(というかこれが一番よく使われるはず)、intで整数にキャストして小数点以下を切り落として使う。$ perl -w -e '$num = int (rand 100) + 1 ; print $num;'
      75
      この例だと、1〜100の間でランダムな数字が選ばれる。

ちょっと短いけど今日はここまで。

[時間割:サーバ]『RADIUS - ユーザ認証セキュリティプロトコル』その2
2009/02/11 22:53 posted by kunkichi

水曜日は「サーバ」の時間。前回に続いて『RADIUS』を読み進めていきます。今日はRADIUSプロトコルの仕様。

RADIUS―ユーザ認証セキュリティプロトコル
Jonathan Hassell アクセンス・テクノロジー
オライリー・ジャパン
売り上げランキング: 193762
  • RADIUS認証プロトコル。RFC2865。
  • ただし、アカウンティングについては、RADIUSアカウンティングプロトコル。こちらはRFC2866。
  • UDPを使用する。理由は以下。
    • 通常、RADIUSはプライマリ、セカンダリで構成する。従って、片方から応答がない場合にもう片方に送信しなおす「再送信タイマ」処理が必要。TCPの再送信は「別のサーバに送信し直す」ということではないので、UDPのほうがよい。
    • また、利用者の使い勝手を考えると、確実性のために時間がかかるTCPを使う必要がない。UDPで一定時間応答がなければ、別の認証サーバにつないで、早くサービス開始できるほうがよい。
    • クライアント・サーバ間の接続が確立されていないといけない「ステートフル」なTCPよりも、クライアント・サーバ・ネットワークに問題があっても、最初の一度だけ初期化して、必要なときにデータのやり取りを行える、「ステートレス」なUDPのほうが手間を省ける。
    • 複数の認証を同時に受けるような場合には、UDPの方がシンプルに実装できる。

    ただし、逆にデメリットもある。

    • TCPなら再送信処理は元から組み込まれているが、UDPの場合は自分で実装する必要がある。
  • 標準では1812番ポートを使用する。アカウンティングプロトコルは1813番。ただし、昔の名残で、1645番、1646番をデフォルトで使おうとする実装も多いので注意。
  • 基本的な動作の流れは以下。
    1. クライアントが、認証に必要な情報を含めたアクセス要求パケットを、サーバに送信する。
    2. サーバは、アクセス要求パケットを受け取ったら、以下のどれかの応答パケットを返す。
      • アクセス許可
      • アクセス拒否
      • アクセスチャレンジ
    3. 一定時間内にサーバからの応答パケットが返ってこない場合は、クライアントは再送信する。
  • パケットの形式は以下。構造はアカウンティングプロトコルも同じ。
    種別コード 識別子 パケット長 認証符号
    属性データ(可変サイズ)
    • 種別コード。パケットの種類を表す。主なものは以下。
      • 1: Access-Request(アクセス要求)
      • 2: Access-Accept(アクセス許可)
      • 3: Access-Reject(アクセス拒否)
      • 4: Accounting-Request(アカウンティング要求)※アカウンティングプロトコル
      • 5: Accounting-Response(アカウンティング応答)※アカウンティングプロトコル
      • 11: Access-Challenge(アクセスチャレンジ)
    • 識別子。要求パケットと応答パケットの対応を行う。
    • パケット長。パケットの長さを表して、実際のパケットとチェックするために使う。
    • 認証符号。データ(特にパスワード)の暗号化・解読のために使う。
  • パケットの種類について。以下、認証・承認に関する部分。
    • アクセス要求
      ユーザID、ネットワークサービスを提供する機器のIPアドレス、暗号化されたパスワードが含まれ、サービスの利用開始を要求する。
    • アクセス許可
      許可された、利用可能なサービス情報が含まれ、サービスの利用を許可する。
    • アクセス拒否
      主に拒否された理由等の文字列が含まれれ、サービスの利用を拒否する。Reply-Message属性とProxy-State属性のみ指定可能。
    • アクセスチャレンジ
      利用者に再度何らかの情報入力を求め、アクセス要求パケットを再送信させる場合に使用する。ワンタイムパスワードとかかな?Reply-Message属性とState属性のみ指定可能。このパケットを受け取ったクライアントはState属性に同じ文字列を指定する必要がある。

ちょっと細かすぎたかな。も少しシンプルにまとめていきたいなー。

今日のところはここまで。

[時間割:Perl]『ミニマルPerl』その18
2009/02/10 01:24 posted by kunkichi

何事もなかったかのように進めます(笑)月曜日は「Perl」の時間。引き続き、組み込み関数をいろいろ見ていきます。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • statを使っていろいろファイルの情報を取ってみる。
    • 一般的な使い方my @stats = stat "sample.txt";
      0 ファイルシステムのデバイス番号
      1 i ノード番号
      2 ファイルの権限
      3 ファイルへのハードリンク数
      4 ファイル所有者のユーザID
      5 ファイル所有者のグループID
      6 デバイス識別子
      7 ファイルのサイズ(バイト)
      8 最終アクセス時刻
      9 最終変更時刻
      10 最終 i ノード変更時刻
      11 標準ブロックサイズ
      12 ファイルに割り当てられているブロック数
    • 括弧で括ってそれに対して添字でアクセスすることもできる。print (stat "sample.txt")[7];
  • シェルの”-nt”をPerlで書く。っていうか”-nt”って知らなんだ、ファイルのmtimeを比較する演算子(newer thanの略)。これは便利だね。
    まずはシェルの場合。ls -lt sample*txt
    -rw-r--r--  1 kunkichi  staff  48  1  9 00:07 sample.txt
    -rw-r--r--  1 kunkichi  staff  62  9 16 23:04 sample2.txt
    $ [[ "sample.txt" -nt "sample2.txt" ]] && echo "sample.txt"
    sample.txt
    次にPerl。$ perl -e '(stat "sample.txt")[9] > (stat "sample2.txt")[9] and print "sample.txt\n";'
    sample.txt
  • ただし、statは実行ユーザの権限に従うので、ファイルの権限がない場合等を考慮して、ファイル単位で処理するほうがよい。$! で OSエラーメッセージを取ってみる。$ perl -e '$mtime1 = (stat "sample3.txt")[9] or die "cannot stat \"sample.txt\": $!";'
    cannot stat "sample.txt": No such file or directory at -e line 1.
  • lsをPerlで書いてみる。僕のMacだとこんな感じに表示される。$ ls -lt sample.txt
    -rw-r--r--  1 kunkichi  staff  48  1  9 00:07 sample.txt
    Perlで書く場合は、Stat::lsModeを使って、パーミッションの表示をlsコマンドと同じにしてみる。#!/usr/bin/perl -w
     
    use strict;
    use Stat::lsMode;
     
    my $filename = $ARGV[0];
     
    my @stats = stat $filename;
    my $mode  = format_mode $stats[2];
    my $nlink = $stats[3];
    my $uid   = getpwuid $stats[4];
    my $gid   = getgrgid $stats[5];
    my $size  = $stats[7];
    my $mtime = localtime $stats[9];
     
    printf"%s %d %s %s %d %s %s\n", $mode, $nlink, $uid, $gid, $size, $mtime, $filename;
    実行結果は以下。$ ./ls.pl sample.txt
    -rw-r--r-- 1 kunkichi kunkichi 0 Mon Feb  9 23:27:26 2009 sample.txt
    getpwuid、getgrgidは組み込み関数で、UID、GID
    からユーザ名、グループ名に変換する。format_mode でls風の出力に変換。
  • シェルでファイル演算子を使う場合、ファイル演算子は引数にファイル名を取るので、条件節で同じファイルにいろんな条件チェックをする場合は以下となる。[[ -f "sample.txt" && -r "sample.txt" && -s "sample.txt" ]]これでは面倒なので、Perlではstatやファイル演算子で使用された、「最後」のファイル名を”_”(アンダースコア)で参照できる。ただし同じブロック内のみ。-f "sample.txt" and -r _ and -s _statの場合はこんな感じ。(stat "sample.txt")[9] == (stat _)[10]
  • statを使うときは perldoc -f statを実行して、コピペして楽しよう。($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

今日はここまで〜。

[時間割:Perl]『ミニマルPerl』その17
2009/02/02 23:23 posted by kunkichi

2月になりました。今月もがんばりすぎないようにがんばります。それが長く続けるコツ。

それはそうと、今日仕事帰りに本屋に寄ったら、こんなんが出てました。

さすが!と言わせる Plagger徹底攻略術
蒲生 睦男
シーアンドアール研究所
売り上げランキング: 42881

流行ってたのって一昨年ぐらいじゃなかったっけ?(笑)でもまあ書籍としてまとめられたものはないので、とりあえず買っときました。『ミニマルPerl』早く終わらせて次はこれだな。

ということで続き。今回まではワンライナー的なものや、grep や awk とかを Perl で実装してみる、って感じでしたが、少しプログラミング寄りになっていきます。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883

組み込み関数

  • 評価コンテキスト
    式の使われ方によって、スカラーコンテキストで評価するのか、リストコンテキストで評価するのか。
    例1: 配列をリスト変数、すなわち、配列のコピーとなる。(リストコンテキスト)@list = @F;例2: 配列の要素数をスカラーで代入(スカラーコンテキスト)$num = @F;例3: 配列の各要素をスカラーに代入。(リストコンテキスト)($num1, $num2) = @F;例4: 配列の各要素を順に表示する。(リストコンテキスト)print @list;例5: scalarを使って意図的にスカラーで出力する。(スカラーコンテキスト)print scalar @list;例6: スカラーとして使用される演算子を式で使う。(スカラーコンテキスト)if( @ARGV > 3 ){ ・・・ };例7: 配列の要素を指す場合の添字として使う。$F[@list] = "added";つまり、これだと配列の最後に新しい要素を追加したのと同じになる。
  • リストからスカラーの変換
    • 上で上げたscalarを使うmy @list = ("John","George","Paul","Ringo");
      print scalar @list;
      結果:4この場合は要素数になる。
    • ダブルクォートする。my @list = ("John","George","Paul","Ringo");
      print "@list";
      結果:John George Paul Ringoこちらの場合は各要素をスペースでつなげた一つの文字列となる。
    • joinを使う。これは後ほど。
  • スカラーからリストへの変換
    • splitを使う。my $str = "John Paul George Ringo";
      my @member = split /\s+/, $line;
      一つ以上のスペースで文字列を区切って、各要素に代入。
      引数の順序に注意。最初の引数は区切りとする正規表現の指定。なければ「語」単位。2番目の引数で分割対象となる文字列を指定する。なければ$_。
    • これまでにやってきた、-wnlaとか-wplaとか。
  • localtimeを使って結果をスカラーとリストで取ってみる。
    • スカラーに代入すると、dateコマンドと同じようなフォーマットになる。my $str = localtime();
      print $str;
      結果:Mon Feb  2 23:07:37 2009scalarを使うともっと単純に書ける。print scalar localtime;
    • 単純にprintするだけだと、リストコンテキストで区切り文字がなく出力されるのでわかりにくいです。。。print localtime;結果:231123211091320この場合はリストに出力してやる。my ($sec,$min,$hour,$dayofmonth,$month,$year,$dayofweek,$dayofyear,$dst) = localtime;
      print $year + 1900 . "/$dayofmonth/$dayofmonth $hour:$min\n";
      結果:2009/2/2 23:16もしくは配列の添字でアクセスする。my $hour = (localtime)[2];
      print "This is $hour o'clock.\n";
      結果:This is 23 o'clock.
    • 上のをいちいち入力するのも覚えるのも面倒なので、perldocで調べるとコピペできる。# perldoc -f localtime・・・
      #  0    1    2     3     4    5     6     7     8
                         ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                                     localtime(time);
      ・・・

ま、この辺は日常のスクリプトでも結構使うので普通だね。とりあえず今日はここまで。

[時間割:Perl]『ミニマルPerl』その16
2009/01/30 02:12 posted by kunkichi

ちょっと間が空いちゃったけど、木曜日は「Perl」の時間。引き続きfind編です。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883
  • パイプの代わりに、バッククォートを使ったコマンド置換で、ファイル名を引数に取るようなところでもPerlは役に立つ。# grep 'John' `ls -d * | perl -wnl -e '-T and print;'カレントにあるディレクトリ・ファイルの一覧(ディレクトリの中身は含まない)からテキストファイルであるものを出力し、それらのうち、’John’を含む行を抽出している。
  • これをファイル形式で書くとこんな感じ#!/usr/bin/perl -s -wnl
     
    BEGIN {
      @ARGV and $re or
        warin "Usage: grep_text -re='REGEX' filen1 [file2, file3, ・・・]
        and exit 255;
     
    -T $ARGV or close ARGV and next;
     
    /${re}/i and  print "$ARGV: $_";
    引数 -reで検索したい表現を指定。ファイルがテキストファイルでなければcloseして次のファイル、テキストファイルであれば、引数で指定された表現が含まれているかをチェックして、含まれていればファイル名とその行を表示する。
    こういうcloseの使い方を覚えないとね。
  • 最初のコマンドのケースをfindのように再帰的にするならば# grep 'John' `find . -type f -print | perl -wnl -e '-T and print;'
  • 引数がファイル名でない場合でも、バリデーションの目的でPerlを使うのも有用。引数のためのプリプロセッサという感じ。
  • find で抽出したファイルに対して何かコマンドを実行したい場合は-execを使ったり、# find . -type f -exec rm {} ¥;とか# find . -type f | xargs rm とかでできるが、それぞれ問題がある。
    • -execの場合はコマンドのプロセスがfindの抽出結果分だけ起動する。
    • xargsの場合は1回のパイプで渡せる上限の数で渡すので、コマンドのプロセスは節約できるが、たとえば以下のケースだと、# find . -type f | xargs sort | tail -1もしfindの数が1回のパイプの上限を超えていた場合は、分割された「まとまり」単位でsortが実行されるため、全体をsortした結果の最新(最後の1行)にはならなかったりする。
  • Perlだとこれを回避できる。以下サンプルスクリプト。#!/usr/bin/perl -wnl
    BEGIN{ $latest_modified=0; }
    $mtime = (stat $_)[9];
    if( $mtime > $latest_modified ){
      $last_modified = $mtime;   ※ここで最新のファイルのタイムスタンプが保持される。
      $last_modified_file = $_;   ※ここで最新のファイルのファイル名が保持される。
    }
    END{
      print $name;
    }
    まあプログラミングらしく、最新のタイムスタンプを変数に記録しておいて、それと比較して最も最近のものの情報(ファイル名、タイムスタンプ)を常に更新するような仕組みにすればよいということだね。
  • あとxargsだと空白文字を含む引数は別々の引数として処理されしまう。Perlだと空白を区切りとして分割させないこともできる。# find . -type f | perl -wnl -e 'print -s,  " $_";

grepやawkの置き換え、だけでなく、今回のfindのように、組み合わせて有効に使えるというのもPerlのよいところだね

これでfindも終わりました。

次回はこれまでのコマンドよりの部分から、もう少しプログラミングに近いところのお話。

[時間割:サーバ]『RADIUS - ユーザ認証セキュリティプロトコル』その1
2009/01/29 02:42 posted by kunkichi

相変わらず体調も精神も停滞気味な感じですが、無理せずできるレベルでがんばります。

毎週水曜日は「サーバ」の時間だったのだけど、これ!と興味が沸くようなものがなくて、ダラダラと本を読んだりしてたのですが、ちょい仕事で必要に迫られたこともあって(笑)今回から『RADIUS』を勉強してみようかと思います。

とはいっても、日常業務でそれなりには触ってるので、ちゃんと系統立てて整理していくのが目的です。

RADIUS―ユーザ認証セキュリティプロトコル
Jonathan Hassell アクセンス・テクノロジー
オライリー・ジャパン
売り上げランキング: 193762


RADIUSとは

  • Remote Access Dial In User Serviceの略。
  • 「AAA」モデル。認証(Authentication)、承認(Authorization)、アカウンティング(Accounting)。
    • 認証 ・・・ 正規のユーザであるかの確認。一般的なIDとパスワードの組み合わせ。
    • 承認 ・・・ 認証されたユーザに対して、どのようなサービスを許可するのか。
    • アカウンティング ・・・ ユーザが利用した事実と利用状況を記録する。
  • クライアント・サーバ方式。クライアントがサーバのリソースを使用する。
  • プロキシも可能。AAAサーバが他のAAAサーバへの要求の転送を行う。プロバイダ同士の再販とか卸とか。
  • ホップトゥホップ方式とエンドトゥエンド方式。
    • ホップトゥホップ方式
      • 利用者端末 <=> 着信装置(NAS、BASなど)<=> AAAサーバ <=> 他AAAサーバ
      • 隣接する機器同士の間に「信頼」関係が確立される。(利用者端末と着信装置、着信装置とAAAサーバ、AAAサーバと他AAAサーバ、・・・)
    • エンドトゥエンド方式
      • 利用者端末 <-> 着信装置(NAS、BASなど)<-> AAAサーバ <-> 他AAAサーバ
      • 利用者端末と最終到達点のAAAサーバ間で「信頼」関係が確立される。その間は単なる経路。
  • AAA承認フレームワーク
    • エージェント手順
      利用者端末とサービス機器の間にAAAサーバを置く。利用者端末からの要求をAAAサーバが承認し、サービス機器にサービス提供を指示する。
    • プル手順
      利用者端末とAAAサーバの間にサービス機器を置く。利用者端末からの要求があれば、サービス機器は、承認をAAAサーバに行い、承認されたら利用者端末にサービスを提供する。
    • プッシュ手順
      利用者端末はAAAサーバに要求を行い、承認されたら「チケット」を応答する。利用者端末はそのチケットを持って、サービス機器にサービスの提供を要求する。
  • UHO(User Home Organization) ・・・ エンドユーザと直接サービス利用契約関係を結ぶ組織。
  • サービスプロバイダ ・・・ 実際にサービスを提供する組織。
  • UHOとサービスプロバイダが同一の場合は、AAAサーバとサービス機器は同じ組織内にあることが多い。
  • UHOとサービスプロバイダが別々の場合は、UHOがAAAサーバを持ち、サービスプロバイダがサービス機器+AAAサーバを持つ、などの形態になる。これをローミングという。ローミングでも上の3つの承認フレームワークが当てはまる。
  • UHOが、複数の別々のサービスプロバイダを利用して、一定のサービスを利用させるような形態を、分散サービスという。
  • どのようなルールでユーザを承認しサービスを提供するかを決めているのがポリシーである
  • 資源管理とセッション管理
    • 資源管理
      割当可能な資源の利用状況を監視するための機能
    • セッション管理
      セッション状況を記録し、その内容に応じてセッションの状態を変更させる機能。
  • RADIUSプロトコルの特徴
    • UDP。
    • ホップトゥホップ。
    • 「状態」がない。
    • PPPでのPAP認証とCHAP認証をサポート。
    • MD5によるパスワードの隠蔽。
    • 属性値のペア。ベンダ固有で作ることも可能。
    • MD5によるパスワードの隠蔽
  • RADIUSプロトコルの制限
    • セキュリティ的な問題。PPPのPAP認証では経由するプロキシがパスワードを見ることができる。
    • あくまでも承認までしか行わない。承認後は資源割当の解除や停止はできない。
    • 「状態」がないため、資源管理・セッション管理が100%ではない。
    • 大規模システムではパフォーマンスの低下、データの損失の問題が発生するため、スケーラビリティが低い。

まだ最初のところなので概念とか言葉とかそういう点が多いのだけど、AAAフレームワークみたいなのは、システムの設計や構成を考える上では非常に役に立ちますね。

今日はここまで。次回はRADIUSプロトコルの仕様についてです。

[時間割:C言語]『はじめてのC言語完全入門』その16
2009/01/24 00:40 posted by kunkichi

ここんところ疲れが出たみたいで、本読みつつ知らないうちに落ちてるという毎日で少しアップをサボり気味、、、また気分入れ替えて出直しです。ということで金曜日は『C言語』。今回は文字列の応用編。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • stdlib.h ・・・ 数値への変換#include <stdlib.h>
    • 文字列をintに変換int i = atoi("12345");
      i += 5;
      printf("%d\n",i);
      結果:12350
    • 文字列をlongに変換long l = atol("1000000000");
      l += 1000000000;
      printf("%ld\n",l);
      結果:2000000000
    • 文字列をflotに変換double f = atof("3.141");
      f += 0.245;
      printf("%f\n",f);
      結果:3.386000atofはfloat型でなくdouble型に変換するので注意
    • 数値と文字が両方含まれる場合
      • 文字は変換できないのでその手前までを変換しようとする。int i = atoi("12345abcde");
        printf("%i\n",i);
        結果:12345最初から文字があって数字が続く場合int i = atoi("12345abcde");
        printf("%i\n",i);
        結果:0
      • 先頭の空白文字は無視されるint i = atoi("     12345");
        printf("%i\n",i);
        結果:12345
  • strings.h ・・・ 文字列操作#include <strings.h>
    • 文字列のコピー
      • そのままコピーchar str1[] = "abcdefghijklmnopqrstuvwxyz";
        char str2[256];
        strcpy(str2,str1);
        printf("%s\n",str2);
        結果:abcdefghijklmnopqrstuvwxyzstrcpyの引数はコピー先、コピー元の順なので注意。
      • コピーする文字数を指定してコピーchar str1[] = "abcdefghijklmnopqrstuvwxyz";
        char str2[256];
        strncpy(str2,str1,10);
        str2[10] = '\0';
        printf("%s\n",str2);<code>結果:<code>abcdefghij
        strncpyの場合、コピー元文字数とコピーする文字数に注意。
        「コピー元文字数<コピーする文字数」の場合は上記のように最後にNULL文字を付与してやる必要がある。
        逆に「コピー元文字数>コピーする文字数」の場合は残りの文字をNULL文字が埋めるので気にしなくてよい。
    • 文字の連結char str1[] = "abcdefghijklmnopqrstuvwxyz";
      char str2[] = "1234567890";
      strcat(str2,str1);
      printf("%s\n",str2);
      結果:1234567890abcdefghijklmnopqrstuvwxyzstrcatは第1引数の後ろに第2引数をくっつける。
      連結先は連結した文字列を含める十分なサイズを持ってないと行けないとあるけど、上のように書くと特に意識しなくても連結されるんだけどなぁ、、、

おっと、なんかまとめるのに時間がかかったなぁ。あんまりページ進んでないやw。
まあ少しでも毎日続けれるように、無理せず今日はここまで。

このページの先頭へ