NeiNeigh's blog

覚書のようなブログ.PC・アプリケーション・プログラミング・オーディオ・アニメ

libeventの使い方

だんだんlibeventがどんなものかわかってきたのでメモ
libeventはスレッドセーフでないため,マルチスレッドで使う場合にはこのリソース(event_base)を分けて管理する必要がある.これについては最後に記す.

event_base1つだけで簡単にやる方法

ここより引用
libevent + 使い方 | ninxit.blog

1.event_init で初期化
2.event_set でイベント設定
3.event_add で設定したイベントを追加
4.event_del で追加したイベントを削除
5.event_dispatch でイベント通知の検知を開始

だいたいこんな感じである.順番に見ていく

1.event_init()
続きを読む

C言語のソケットプログラミング

ソケットプログラミングについて調べた.

ソケット通信

ソケット通信の流れ

おおまかな流れは

  • 接続をリスニングするソケットを作成.socket()
  • ポート番号・IPアドレスなどを指定するための構造体を設定.struct sockaddr_in
  • その構造体を使ってソケットにポート番号・IPアドレスを設定. bind()
  • ソケットの接続準備.listen()
  • ソケットの接続待機.accept()
  • データの送受信.read(), write()
  • ソケット切断.close()

このようになっている.
次から順番に詳しく見ていく.

続きを読む

libeventとは

日本語で書いてある記事があんまりなく,どんなソフトウェアなのかよくわからなかったので調べる.

libeventとは

英語版のwikipediaのページを和訳してみた.wikipediaを毛嫌いする人が多いが(信頼性がないだのどーのこーの),いうてそれなりに正しいこと書いてあるし,その分野の表面上の知識を得るだけなら十分.だと思う.
http://en.wikipedia.org/wiki/Libevent

続きを読む

C言語でマルチスレッドプログラミング

Cでマルチスレッドプログラミングする必要性がでてきたので,それについて調査.

pthread

マルチスレッドするならこのPOSIXのライブラリを使うのが普通っぽい.
memcachedはこのpthreadとlibeventで,コネクションをスレッドに振り分けてるんだと思う.

pthreadの使い方については,ここがよくまとめられている.
http://docs.oracle.com/cd/E19455-01/806-2732/6jbu8v6oi/index.html#tlib-79569

基本的には,これでスレッド生成する.

int pthread_create(pthread_t *tid, const pthread_attr_t *tattr,
    void*(*start_routine)(void *), void *arg); 
  • 第1引数のtidにはスレッドIDが格納される.
  • 第2引数で属性を指定する.この属性でスレッドの優先順位・スケジューリングを変えることができる.他にもスタック・サイズやスレッドグループなどの機能も使うことができる.
  • 第3引数には,スレッド化する処理(関数)を指定する.
  • 第4引数には,第3引数で与えた関数の引数を指定する(んだと思う).

WASAPIの共有モードでビットパーフェクトにするには!

f:id:NeiNeigh:20140226021524j:plain
WASAPIで排他モードなら確実にビットパーフェクトな出力になるが,共有モードだとそうはならない.その原因と解決策をちょっと調べたのでまとめる.
参考にしたこのページを完全に丸パクリしただけ.
このブログすごく面白かったです.
http://community.phileweb.com/mypage/entry/2721/20120826/32495/

原因

winでWASAPI共有モードで出力するときは2つの原因によってビットパーフェクトが達成されない可能性がある.

続きを読む

gitの使い方

ソースコードのバージョン管理したいから,そろそろgitの使い方をいい加減おぼえる.

導入

ここらへんを参考にすると良い.
http://linux.keicode.com/prog/git.php
http://www.backlog.jp/git-guide/intro/intro2_1.html

$ sudo apt-get install git-core
$ sudo apt-get install git-doc

gitk(たぶんGUIバージョンのgit)も使うなら

$sudo apt-get install gitk

次に名前とメールアドレスを登録

$ git config --global user.name "foo"
$ git config --global user.email "bar@baz.com"
続きを読む