C/C++

ROエミュ鯖のソースコード その2

コードを読むついでに色々いじくって神様的な気分を味わってみた。 移動速度を早くする // src/common/mmo.h //#define DEFAULT_WALK_SPEED 150 #define DEFAULT_WALK_SPEED 75 たぶん速度増加Lv10と同じ状態。 あらゆる攻撃を無効化 // src/map/battle.c //…

株式会社モルフォのチャレンジテストをちょっとやってみた

モルフォって会社のサイトで面白そうな問題を見つけたのでやってみた。 問題はこちら↓ 非負整数Nの階乗の桁数及び末尾に続く0の数を算出するプログラムを書きなさい。 プログラムはC言語で記述するものとし、標準入力から非負整数N(0≤N≤10000000)を受けとり…

MySQL 5.1.41 + 勉強

mysqld (MySQL 5.1.41) ソースコードざっくり勉強メモ。 関数の呼び出し順番とかを主に。そして適当に。 動作環境は CentOS 5.4。 オプション解析 my.cnf とか。 sql/mysqld.cc main():4301 init_common_variables() が出発点 sql/mysqld.cc init_common_var…

pthread_key + 使い方

pthread_key 周辺の使い方を勉強。 スレッドごとにメモリ領域を確保する仕組み。 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> static pthread_key_t g_key; // スレッド単位で保持するデータ struct MyData{ int count; char data; }; static void* </pthread.h></unistd.h></stdlib.h></string.h></stdio.h>…

send と recv と送信バッファ溢れ

send と recv の使い方と送信バッファ溢れについて。 manpage Manpage of SEND Manpage of RECV SEND non-blocking の場合。 send が失敗して外部変数 errno に EINTR が設定されている場合は、再度送信を試みる必要がある。 データをソケットの送信バッファ…

TCPサーバ + サンプル

TCPサーバのサンプルコードのメモ。 簡単なコードだからか、何度も書いてはどこかへやってたのでいい加減保存することに。 動作は一応 Linux CentOS5, Mac OS X 10.6 で確認済み。 server/main.cpp に socket, bind, listen, accept, select, recv など。 cl…

MySQL + GDB + 解析

MySQL 5.1.41 を GDB 使って解析するメモ。取っかかり編。 環境 : CentOS 5.2 ダウンロード MySQL 5.1.41 のソースをダウンロードする。 インストール /usr/local/mysql-5.1.41 へインストールする。 $ tar zxvf mysql-5.1.41.tar.gz $ cd mysql-5.1.41 $ ./…

epoll + 使い方

libevent のソースコードを参考にしつつ epoll を使ってみたメモ。 ただの興味本位。 動作は、Linux CentOS 5 で確認。 エラー処理とかはやってたりやってなかったり、わりと適当。 server.cpp /** * @file server.cpp * @brief epoll test server. */ #incl…

gdb + core 解析

core ファイルを解析するメモ。 下準備 まず意図的に SEGV させるコードを書く。 $ vi a.cpp #include class CPrint { private: int m_number; char *m_str; public: CPrint() : m_number(10), m_str(NULL) {} ~CPrint() {} void print(){ // ここで SEGV る…

C + システムリソース設定

setrlimit(2), getrlimit(2) メモ。 コマンドラインから ulimit -n 1024 などとせず、プログラム上から設定するやつ。 limits.conf 以上の値を割り当てようとすると失敗するぽい。 サンプルソース #include #include #include #ifndef RLIM_INFINITY #define…

valgrind を使ってみた

valgrind とは? linux 環境で動く超強力なメモリデバッガー。 メモリリークや、セグメンテーション違反を起こしている正確な位置を教えてくれる。 以下、使い方メモ。 使用バージョンは、valgrind-3.2.1 メモリリーク検出など $ valgrind --leak-check=full…

UTF-8 + 文字数カウント

C++ で UTF-8 の文字数を数えるコードを試しに書いてみたメモ。 バイト数ではなく、文字数。 #include #include int strlen_utf8( const char *buff ) { if( buff == NULL ) return 0; int count = 0; int pos = 0; int max_bytes = strlen( buff ); // BOM …