2014年5月20日火曜日

C言語クックブック

0. 基礎知識
  1. Cにおける識別子の有効範囲と変数の生存期間
  2. C初心者が知っておきたいヘッダーファイルとリンクの基礎知識(正しいexternの考え方)
  3. プリプロセッサでプログラムの質を向上させよう
0. volatileで最適化を抑制する

0. 文字配列初期化の心得
  1. callocは、0x00で初期化してくれる
  2. mallocは、0x00で初期化しない
  3. char str[n];は、0x00で初期化しない
  4. 2、3で定義した文字配列にstrncpyで文字配列をコピーする場合は、事前にmemsetなどで初期化すべき。コピー元の文字配列の長さ以降の領域に予期しない値が入っている場合がある
  5. 文字配列に値を設定する関数の挙動(終端文字をセットしてくれるか)は必ず確認
0. 文字配列に値を設定する関数の挙動(よく使うもの)
  1. strncpy
  2. strcat
  3. fread
  4. fgets
  5. sprintf
  6. strstr
  7. memcpy 
0. sprintfの注意点
以下のように終端文字を設定すると(null)が設定される
ex.
char exten[4] = {0};
sprintf(exten,"%s",'\0');
printf("%s\n", exten);
出力結果  = (null)

ブランクを設定したい場合は、以下のようにする
sprintf(exten,"%s","");
0. メモリ割り当て
  1. malloc
  2. calloc
  3. realloc
0. 初期化についての議論
  1. [迷信] とりあえず memset で初期化
  2. 文字配列char str[x]の初期化
  3. char str[xx]、malloc、calloc処理速度比較 
0. フォーマット指定子一覧
0. C言語のバグ回避をするための習慣

0. 関数を調べる
  1. C言語関数辞典
  2. コマンド検索: man
0. ローカル変数とメモリスタックの注意点

0. IPヘッダ構造体について u_int8_t = u_char

0. 苦しんで覚えるC言語
1. x86_64の逆アセンブルを読む(gcc版)

2. strncpy(文字列をn文字コピー)

3. strcpy(文字列のコピー)

strncpy(strcpyとの違い)

4. 文字列の置換~strchg関数を作る

5. 「警告: 初期化子のまわりのブレースを欠いています」対応

6. strcmp(文字列比較)

7. strtok(文字列strの中をデリミッタ文字で区切って、呼び出す毎に区切った文字列のアドレスを返す)

8.  inotify
  1. inotify を使ってファイルシステムのアクティビティーを監視する
  2. inotify API
  3. lsyncd(inotify)で上限ファイル数を超えた時の対処策 
  4. inotifyの上限値設定変更 
  5. inotify で Linux ファイルシステムのイベントを監視する
  6. inotifytools/inotifytools.h File Reference
9. strstr(文字列1から文字列2を検索する)

10. 文字列の終端 null文字('\0')に関すること

11. scanf関数で文字列を得るにはどうしたらいいのか、文字列を扱う時の危険性を考慮する

12. strcat(文字列の連結)

13. メモリの管理について
     mallocもしくはnewで動的にメモリを確保した場合は、以下の関数で動的にメモリを開放する必要がある。
     malloc - free
     new - delete

     ※外部変数はプログラム終了後、関数で定義した内部変数は関数終了後にOSが自動的にメモリを開放する。また、関数についてはstack領域でメモリ確保し、mallocで確保したメモリ領域とは異なる。
     参考:変数とメモリ領域の対応

14. ポインタ
  1. C言語のポインタ ~ & と * を使ってみる ~ 
  2. C言語のポインタ2 ~charポインタとchar配列~ 
  3. C言語 ポインタ完全制覇
  4. ポインタ演算は正しく使用する 
15. static関数

16. 関数から配列の先頭アドレスを返す

17. POSIX正規表現 regex.h

18. if文(≠0:真、=0:偽)

19. GRegex(GLibの正規表現)の一般キャラクタタイプが使えない(警告: 不明なエスケープシーケンス '\d')

20. 大文字小文字
  1. 小文字大文字変換(for文)
  2. 小文字を大文字に変換(while文) 
  3. 大文字小文字を区別せずに文字列を比較する 
21. MySQL C APIを使って、C言語でMySQLに接続

22. プログラムの適切な終了方法を選択する

23. コマンドを実行する

24. プログラムで使う静的ライブラリ、共有ライブラリ

25. 文字列を整数型に変換する

26. statvfsでファイルシステム情報を取得

27. 標準入出力関数(1)

28. 配列の要素数を取得する

29. 配列

30. 配列やメモリ領域の内容をコピーする

31. 配列を自由自在に作る(配列のサイズを動的に変更)

32. sprintf(書式指定変換した出力を文字列に格納)strcpyとの使い分け

33. boolean型

34.  NULLポインタ
  1. NULLポインタ
  2. 空ポインタ(null pointer) 

35. strncmpとstrcmp
  1. 文字列をn文字比較 
  2. 文字列の比較 
36. system関数
  1. system関数 
  2. system関数の戻り値についての質問 
  3. Linux環境のC言語で、実行ファイルを呼び出して、結果を取得する方法 
37. libcurlでhttp接続
  1. 本家サイト
  2. cURL と libcurl を使ってインターネット経由でやりとりする
  3. C言語のlibcurl を使ってみた。でもgccのライブラリ・パスがよくわからなかった。
  4. ftpuploadサンプル 
38. XMLパーサー
  1. C/C++のXML Parserについてよくまとまっているサイト
39. C開発環境開発 for Windows
  1. プログラミング速成コース 開発環境の準備-Windows編install_win.html 
  2. Windows 7 で C/C++ の開発・実行環境を整える!
  3. cygwin + Eclipse + CDT 環境構築 (Windows) 
  4. データを保持する 
  5. CURLOPT_HEADERFUNCTION explained
  6. Setup Cygwin toolchain in Eclipse CDT(cygcheckコマンドのサンプル)
  7. 標準ライブラリにパスを通す
  8. [Eclipse]cppのSymbol ‘NULL’ could not be resolvedがクリーン&ビルドでも解決しない時に試したいこと 
40. C言語 printfとfprintfの違いについて

41. シグナル処理関数(シグナルハンドラ)を登録する

42.  ファイル操作
  1. ファイルシステム
  2. ファイル操作関数 / fopen
  3. scandir()でディレクトリエントリのリストを取得する方法
  4. scandirかopendirか悩んでみた。
43. C言語システムコール-gethostname

44. segfault の error_code の意味

45. C言語 popen()でコマンドを実行して出力を読み込む

46. 色々なデータ型の最大値、最小値

47. ファイルの所有者を変更する chown関数

48. システムコール-mkdir

49. Linuxでプロセスのデーモン化

50. マルチスレッド
  1. スレッドと排他処理とデッドロック(pthread,mutex)
  2. セマフォの操作を行なう
  3. pthread_cancel(3)を使ってみた 
  4. マルチスレッドについて(マルチプロセスとの対比 fork) 
  5. 子プロセスを生成する(fork) 
51. プログラム途中強制終了、メモリーリーク

52.  voidポインタ
  1. voidポインタの利点
  2. void型ポインタ 
53. uname関数でシステム情報を取得する

54. gethostnameのヘルプ・マニュアル

55. バイトオーダー(htons() と htonl() を その逆は ntohs() と ntohl())

56. バイトオーダ - ビッグエンディアン/リトルエディアン

57. プログラムファイル分割
  1. ファイル分割
  2. 分割コンパイルとリンケージ
  3. C言語の正しいヘッダファイルの書き方 
58. 文字列処理関数 綺麗にまとまってて分かりやすい

59. C言語で2次元配列を動的に割り当てる4つの方法 めっちゃ参考にしました

60. 構造体配列
  1. 構造体配列のポインタ表現
  2. メモリの動的確保と自己参照構造体
  3. ハッシュテーブル 
  4. ハッシュテーブルを実装してみる
  5. 構造体 
61. 関数内でmallocするときの注意

62. mallocに対するcallocのメリットは何ですか。

63. C言語でMySQLにアクセスする
※MYSQL_ROWは、文字型のポインタの配列のため、int型の値を取得した場合は、atoiでの変換が必要

64. 文字型配列の初期化とクリア

65. MD5ハッシュによるファイルチェック
  1. ファイルが一致することを確認する
  2. MD5 によるハッシュ値の計算
  3. md5 reference error(コンパイル時の注意)
66. fread

67. snprintf

68. C言語標準ビルトイン型で関数オーバーロードしてはいけない

69. poll, ppoll - ファイルディスクリプターにおけるイベントを待つ

70. gcc の警告オプション -Wall と -W 

71. Interprocess Communication (IPC)

72. バッファオーバーラン ~その1・こうして起こる~

73. gdb
  1. Debugging with GDB
  2. gdbの主要コマンド
  3. 最適化オプションのまとめ
  4. スタック・フレーム
  5. gcc+gdbによるプログラムのデバッグ 第1回 ステップ実行、変数の操作、ブレークポイント 
  6. gcc+gdbによるプログラムのデバッグ 第2回 変数の監視、バックトレース、その他のコマンド 
  7. gcc+gdbによるプログラムのデバッグ 第3回 gdbの便利な機能、デバッグの例 
  8. 既に起動しているプロセスをgdbで制御する 
  9. forkするプログラムのデバッグ 
 74. Linuxでネットワークインターフェースのリンク状態変化を得る

0 件のコメント:

コメントを投稿