オールラウンドプログラミングシリーズC/C++ 300の技

[表紙]C/C++ 300の技

紙版発売

B5判/208ページ/CD1枚

定価2,178円(本体1,980円+税10%)

ISBN 4-7741-1312-3

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

C/C++は現在でも非常に多く利用されています。これらのテクニックを300以上のTips形式にして解説しています。見やすくわかりやすい構成ですので,入門書を卒業した人からベテランのプログラマまで必ず役立つ書籍です。

こんな方におすすめ

  • 仕事でC言語を使う方
  • C言語を使っていてここが知りたいという場面に遭遇する方

目次

1.Windows+オープンソースでデキル!C/C++プログラミング環境構築

  • Cygwin
    • 1 Cygwinをインストールするには?
    • 2 開発サイクルとは?
    • 3 gccのバージョンを調べるには?
    • 4 画面の色を変更するには?
    • 5 ローカルハードディスクの任意の場所を参照するには?
    • 6 cygwin1.dllを必要としない実行ファイルを作成するには?
    • 7 コンパイルするには?
  • エディタ
    • 8 Cygwinからエディタを起動するには?
    • 9 秀丸で関数ジャンプを設定するには?
    • 10 Meadowをインストールするには?
    • 11 Meadowの環境設定を行うには?
  • make
    • 12 makeとは?
    • 13 makeのルールとは?
  • gdb
    • 14 gdbとは?
    • 15 gdbを使う準備をするには?
    • 16 gdbを起動するには?
    • 17 ソースを表示するには?
    • 18 ブレークポイントを設定するには?
    • 19 プログラムを実行するには?
    • 20 ステップごとに実行するには?(関数外)
    • 21 ステップごとに実行するには?(関数内部)
    • 22 変数値を表示するには?
    • 23 変数値を変更するには?
    • 24 次のブレークポイントまで実行するには?
    • 25 デバッガを終了するには?
    • 26 コマンドのヘルプを見るには?
  • CVS
    • 27 バージョン管理ツールとは?
    • 28 CVSを準備するには?
    • 29 ソースファイルを登録するには?
    • 30 ソースを取り出すには?(チェックアウト)
    • 31 ソースを再登録するには?(チェックイン)

2.データベースソフトはいらない テキストファイルを使ってオリジナルDB

  • 基本
    • 32 DBの仕様を決めるには?
    • 33 CSV解析部インタフェースを作成するには?
    • 34 CSVを解析する関数とは?
    • 35 フィールドの数を数えるには?
    • 36 次のセパレータを探すには?
    • 37 結果領域を確保するには?
    • 38 フィールドに分割して結果領域にセットするには?
    • 39 フィールドを整形するには?
    • 40 CSV領域を解放するには?
    • 41 テストプログラムを実行するには?
  • 機能追加
    • 42 コマンドラインオプションを取得するには?
    • 43 データを追加するには?
    • 44 一覧を表示するには?
    • 45 検索機能を追加するには?
    • 46 修正機能を追加するには?
    • 47 削除機能を追加するには?
  • プログラムの実行
    • 48 プログラムを実行するには?
    • 49 テスト用インタフェースを作成するには?

3.C/Sプログラムはこう作る ソケット&スレッド完全マスター

  • ソケット編
    • 50 ソケットを利用するには?
    • 51 ソケットはTCP/IPをサポートするのか?
    • 52 ソケットを使うための関数にはどのようなものがあるのか?
    • 53 コネクションとは?
    • 54 クライアントでの基本的な手順とは?
    • 55 サーバでの基本的な手順とは?
    • 56 クライアントとサーバの処理手順の関係とは?
    • 57 具体的なクライアントのコードはどうなるのか?
    • 58 具体的なサーバのコードはどうなるのか?
    • 59 htonsとは?
    • 60 inet_addrとは?
    • 61 IPアドレスではなく名前を使うには?
    • 62 hostent構造体とは?
    • 63 アドレスを再利用するには??
    • 64 サーバのサンプルコードは実用に耐えられるのか?
  • スレッド編
    • 65 スレッドとは?
    • 66 スレッドはどのように動作するのか?
    • 67 スレッドを作成するには?
    • 68 スレッド化する関数はどのように作成すれば良いのか?
    • 69 pthread_detachの役割とは?
    • 70 スレッドはいつ終了するのか?
    • 71 スレッドを強制的に終了するには?
    • 72 スレッドが終了するのを待つには?
    • 73 スレッドにパラメータを与えるには?
    • 74 スレッドにポインタを渡す際の注意点とは?
    • 75 スレッドに構造体のポインタを渡すには?
    • 76 表示が崩れる理由とは?
    • 77 表示が崩れないようにするには?
    • 78 ミューテックスを使うには?
    • 79 セマフォを使うには?
    • 80 双方向で同期するには?
  • Webサーバの実践
    • 81 スレッドを使ってサーバを実装するには?
    • 82 Webサーバが送信するデータとは?
    • 83 クライアントからのリクエストとは?
    • 84 実際のブラウザからのリクエストとは?
    • 85 ソケット出力用の関数を作るには?
    • 86 リクエストに対して実際のファイルを返すようにするには?
    • 87 putFile関数を作成するには?
    • 88 putHeader関数を作成するには?
    • 89 putResponse関数を作成するには?
    • 90 putResponse関数を呼び出すには?
    • 91 NotFoundエラーを処理するには?
    • 92 画像ファイルを転送できるようにするには?
    • 93 対応表からメディアタイプを取得するには?
    • 94 getMediaTypeを使ってレスポンスを返すようにするには?
    • 95 スレッドを使いまわすには?
    • 96 スレッド間の同期を取るには?
    • 97 どうすればスレッドを使いまわすことができるのか?
    • 98 スレッドテーブルを初期化するには?
    • 99 clientThreadはどうすれば良いのか?
    • 100 mainはどう変更すれば良いのか?
    • 101 getSleepThreadはどう作成するのか?
    • 102 Broken Pipeエラーを防ぐには?
    • 103 SIGPIPEシグナルを無視するには?
    • 104 SIGPIPE用のシグナルハンドラを作成するには?
    • 105 完成したサーバは実用に耐えられるのか?

4.C++の標準テンプレートライブラリ STLリファレンス

  • コンテナ
    • 106 vector()
    • 107 vector(src)
    • 108 vector(n)
    • 109 "vector(n,elem)"
    • 110 "vector(begin,end)"
    • 111 "assign(begin,end)"
    • 112 "assign(n,elem)"
    • 113 at(idx)
    • 114 back()
    • 115 begin()
    • 116 capacity()
    • 117 clear()
    • 118 empty()
    • 119 end()
    • 120 "erase(begin,end)"
    • 121 erase(pos)
    • 122 front()
    • 123 "insert(pos,begin,end)"
    • 124 "insert(pos,elem)"
    • 125 "insert(pos,n,elem)"
    • 126 max_size()
    • 127 operator[](idx)
    • 128 pop_back()
    • 129 push_back(elem)
    • 130 rbegin()
    • 131 rend()
    • 132 reserve()
    • 133 resize(n)
    • 134 resize(n,elem)
    • 135 size()
    • 136 swap(v2)
    • 137 deque()
    • 138 deque(src)
    • 139 deque(n)
    • 140 "deque(n elem)"
    • 141 "deque(begin,end)"
    • 142 "assign(begin,end)"
    • 143 "assign(n,elem)"
    • 144 at(idx)
    • 145 back()
    • 146 begin()
    • 147 clear()
    • 148 empty()
    • 149 end()
    • 150 erase(begin)
    • 151 erase(pos)
    • 152 front()
    • 153 "insert(pos,begin,end)"
    • 154 "insert(pos,elem)"
    • 155 "insert(pos,n,elem)"
    • 156 max_size()
    • 157 operator[](idx)
    • 158 pop_back()
    • 159 pop_front()
    • 160 push_back(elem)
    • 161 push_front(elem)
    • 162 rbegin()
    • 163 rend()
    • 164 resize(n)
    • 165 "resize(n,elem)"
    • 166 size()
    • 167 swap(d2)
    • 168 list()
    • 169 list(src)
    • 170 list(n)
    • 171 "list(n,elem)"
    • 172 list(begin
    • 173 "assign(begin,end)"
    • 174 "assign(n,elem)"
    • 175 back()
    • 176 begin()
    • 177 clear()
    • 178 empty()
    • 179 end()
    • 180 "erase(begin,end)"
    • 181 erase(pos)
    • 182 front()
    • 183 "insert(pos,begin,end)"
    • 184 "insert(pos,elem)"
    • 185 "insert(pos,n,elem)"
    • 186 max_size()
    • 187 merge(l2)
    • 188 pop_back()
    • 189 pop_front()
    • 190 push_back(elem)
    • 191 push_front(elem)
    • 192 rbegin()
    • 193 remove(val)
    • 194 remove_if(op)
    • 195 rend()
    • 196 resize(n)
    • 197 "resize(n,elem)"
    • 198 reverse()
    • 199 size()
    • 200 sort()
    • 201 sort(op)
    • 202 "splice(pos,l2)"
    • 203 "splice(pos,l2,l2begin,l2end)"
    • 204 "splice(pos,l2,l2pos)"
    • 205 swap(l2)
    • 206 unique()
    • 207 set()
    • 208 set()
    • 209 set(src)
    • 210 "set(begin,end)"
    • 211 begin()
    • 212 clear()
    • 213 count(val)
    • 214 empty()
    • 215 end()
    • 216 equal_range(val)
    • 217 "erase(begin,end)"
    • 218 erase(val)
    • 219 erase(pos)
    • 220 find(val) 87
    • 221 "insert(begin,end)"
    • 222 insert(elem)
    • 223 lower_bound(val)
    • 224 max_size()
    • 225 rbegin()
    • 226 rend()
    • 227 size()
    • 228 swap(s2)
    • 229 upper_bound(val)
    • 230 map()
    • 231 map()
    • 232 map(src)
    • 233 "map(begin,end)"
    • 234 begin()
    • 235 clear()
    • 236 count(key)
    • 237 empty()
    • 238 end()
    • 239 equal_range(key)
    • 240 "erase(begin,end)"
    • 241 erase(key)
    • 242 erase(pos)
    • 243 find(key)
    • 244 "insert(begin,end)"
    • 245 insert(elem)
    • 246 lower_bound(key)
    • 247 max_size()
    • 248 operator[](key)
    • 249 rbegin()
    • 250 rend()
    • 251 size()
    • 252 swap(m2)
    • 253 upper_bound(key)
  • アルゴリズム
    • 254 accumulate
    • 255 binary_search
    • 256 copy
    • 257 count
    • 258 count_if
    • 259 fill
    • 260 fill_n
    • 261 find
    • 262 find_if
    • 263 for_each
    • 264 generate
    • 265 generate_n
    • 266 includes
    • 267 max_element
    • 268 merge
    • 269 min_element
    • 270 remove
    • 271 remove_if
    • 272 replace
    • 273 replace_if
    • 274 reverse
    • 275 rotate
    • 276 sort
    • 277 transform
    • 278 unique
  • イテレータ
    • 279 InputIterator
    • 280 OutputIterator
    • 281 ForwardIterator
    • 282 BidirectionalIterator
    • 283 RandomAccessIterator
    • 284 関数オブジェクト

5.中級者になるための壁 配列&ポインタ徹底攻略

    • 285 変数とメモリの関係とは?
    • 286 配列変数とは?
    • 287 配列名とは?
    • 288 要素番号とは?
    • 289 配列の開始要素番号とは?
    • 290 配列変数と通常変数の違いとは?
    • 291 1次元配列とは?
    • 292 2次元配列とは?
    • 293 配列の保存イメージとは?
    • 294 配列を使った繰返し処理とは?
    • 295 配列と繰返し処理(コード)
    • 296 2次元配列を使うには?
    • 297 文字列と配列の関係とは?
    • 298 文字配列を使うには?
    • 299 アドレスとは?
    • 300 アドレスを使うには?
    • 301 なぜアドレスが必要なのか?
    • 302 文字型配列とアドレス
    • 303 配列を初期化するには?
    • 304 アドレス渡しが必要なC言語関数とは?
    • 305 ポインタ変数とは?
    • 306 なぜ変数が必要だったのか?
    • 307 ポインタを利用しなくても良い場合とは?
    • 308 変数表現とポインタ表現とは?
    • 309 ポインタと配列の関係とは?
    • 310 ポインタを使って文字列を扱うには?
    • 311 ポインタの加算が意味するものとは?
    • 312 ポインタの初期化とは?
    • 313 ポインタ配列を使うには?
    • 314 コマンドライン引数とは?
    • 315 argvポインタ配列を使うには?
    • 316 ファイルポインタを使うには?
    • 317 ファイルを読み込むには?
    • 318 ファイル出力処理
    • 319 配列を引数として渡すユーザ関数を作成するには?
    • 320 ポインタを使いソート処理を行うには?
    • 321 構造体とアドレス
    • 322 構造体を受け渡すには?
    • 323 ポインタを使って構造体メンバへアクセスするには?
    • 324 構造体メンバ変数がポインタの場合のアクセス方法とは
    • 325 構造体配列へアクセスするには?
    • 326 2次元配列とポインタ配列を処理するには?
    • 327 2次元配列とダブルポインタを処理するには?
    • 328 ポインタを簡単に処理するには?
    • 329 ポインタをうまく活用するには?

<特別講座>1.これさえ読めば知識ゼロでも大丈夫 はじめて学ぶCのCGI

  • 事前準備
    • 最初に
    • Apacheの起動方法
    • CGI実行用モジュールの指定方法
    • CGIを実行するディレクトリの設定方法
    • 実行ディレクトリへのエイリアス
  • ブラウザに文字列を表示させる
    • 最も簡単なCGI
    • makeファイルの利用
    • CGIの実行
  • データの受け渡し
    • ホームページからCGIを実行させる
    • フォームを使って,ホームページからCGIを実行させる
    • CGIにデータを渡す
    • フォームからのデータ
    • データの受け取り方法
    • strtok関数
    • フォームからPOSTでCGIを実行する
  • 順不同なデータの受け渡し
    • 入力フォームが変更になる場合
    • データを分解して構造体に格納
    • データ未入力への対処
    • 構造体からデータを取り出す
  • 日本語対策
    • なぜ日本語は文字化けするのか
    • 日本語処理
    • 空白データのやり取り
    • 16進数データへの変換
  • EUCコードへの変換
    • 文字コードに注意する場合
    • ブラウザによる文字コード体系の判断
    • EUCコードへの変換方法
    • EUCコードとSJISコードの判定
  • Cookie
    • Cookieのメリット
    • Cookieを使う
    • パラメータ

<特別講座>2.超高速CGI 厳選50 サンプル&テクニック

  • 基礎知識
    • EX01 ウェブの仕組みとは?
    • EX02 CGIとは?
    • EX03 Perlとの違いとは?
    • EX04 C言語でCGIを作る前提条件とは?
    • EX05 C言語のCGIが使えるかどうかを調べるには?
    • EX06 ApacheでCGIを使えるようにするには?
  • プログラミング
    • EX07 ソースコードの漢字コードは何を選択するのか?
    • EX08 C言語で文字を表示するには?
    • EX09 Windows上でC言語のCGIを実行するには?
    • EX10 Windows上でCGI実行ファイルを作るには?
    • EX11 現在時刻を表示するには?
    • EX12 tm構造体とは?
    • EX13 CGIをウェブから呼び出すには?
    • EX14 HTMLからCGIにデータを送るには?
    • EX15 環境変数からデータを読み出すには?
    • EX16 POSTでデータを受け取るには?
    • EX17 日本語を表示するには?
    • EX18 ラジオボタンを作成するには?
    • EX19 チェックボックスを作成するには?
    • EX20 チェックボックスでの選択データをCGIで取得するには?
    • EX21 ファイルに記録するには?
    • EX22 ファイルに書き込みできないときには?
    • EX23 ファイルからデータを読み出すには?
    • EX24 バイナリファイルで保存するには?
    • EX25 バイナリファイルを読み出すには?
    • EX26 ファイルをロックするには?
    • EX27 コンソールでCGIの実行テストを行うには?
    • EX28 コンソールでPOSTを使うには?
    • EX29 ブラウザの情報をCGIで取得するには?
    • EX30 ブラウザにクッキーをセットするには?
    • EX31 ブラウザからクッキーを取得するには?
    • EX32 携帯電話を判別するには?
    • EX33 携帯電話向けサイトを作成する際に注意すべきこととは?
    • EX34 漢字コードを統一するには?
    • EX35 Linuxでの共有ライブラリへのパスを追加するには?
    • EX36 インストールしたライブラリを利用するには?
    • EX37 CGIから簡単にメールを送信するには?
    • EX38 メールサーバと通信してメールを送信するには?
    • EX39 CGIで画像を扱うには?
    • EX40 CGIで画像を作成するには?
    • EX41 データからグラフを作成するには?
    • EX42 画像でアクセスカウンタをつくるには?
    • EX43 MySQLとは?
    • EX44 MySQLを入手するには?
    • EX45 MySQLをインストールするには?
    • EX46 C言語からデータベースにSQL文を発行させるには?
    • EX47 データベースから値を取得するには?
    • EX48 郵便番号検索データベースを作成するには?
    • EX49 郵便番号検索フォームを作成するには?
    • EX50 送信する内容をJavascriptでチェックするには?
    • EX51 郵便番号の検索結果を表示するには?

<付録>

    • 基本プログラムの構造
    • 関数の定義
    • viod型
    • 基本型の種類とサイズ
    • 変数
    • 文字列
    • ブロック
    • if文
    • switch文
    • forループ
    • whileループ
    • doループ
    • 配列
    • 構造体
    • 共用体
    • 列挙型
    • typrdef
    • ポインタ
    • ポインタの加減算
    • 引数
    • 再帰呼び出し
    • コンパイラ指示子
    • 関数型マクロでの注意点
    • 付録CD-ROMの使い方
    • 機能・目的別索引
    • 用語索引
    • 著者略歴