タグ

cに関するmattnのブックマーク (19)

  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

    mattn
    mattn 2010/11/26
  • libfilo - A library for file locking

    About libfilo is a small portable library to do userspace file locking, like fcntl(), lockf() or flock(), but within threads. If you want multiple threads to access a file simultaneously, you will probably need some kind of locking to avoid them stepping on each other and corrupting everything. Currently, there is no standard way of doing this: fcntl() ignores threads, and only works between proce

    mattn
    mattn 2010/02/04
  • volatile爆発しろ! - yamasaのネタ帳

    volatileという英単語には「爆発しやすい」という意味があるようですね。豆知識。 さて、前エントリのスライドで説明したように、マルチスレッドプログラムを正しく動作させるためにはCPUやコンパイラによるリオーダーを制限することが重要であり、そのためにメモリバリア(メモリフェンス)という仕組みがあるわけです。そして、CやC++のvolatile変数はメモリバリアとしての効果を持っていない、という問題点について指摘しました。この部分をもう少し掘り下げてみます。 マルチスレッドプログラムを正しく同期化させるために必要な「メモリバリア付きアトミック操作」について、それが正しく動作するために満たすべきチェックポイントを挙げると以下になります。 コンパイラは、その操作自体を最適化によって消去してしまったりしない。 コンパイラは、その操作をアトミックに実行できる命令を出力する。 コンパイラは、その操作

    volatile爆発しろ! - yamasaのネタ帳
    mattn
    mattn 2010/02/03
  • 安全なシグナルハンドラを実装するには ――C/C++セキュアコーディング入門(4)

    UNIXなどPOSIX準拠のOSでは、割り込みや例外を抽象化した「シグナル」と呼ばれる仕組みを用いてプロセスに(非)同期イベントが通知されますが、シグナルハンドラで行える処理には制約があり、これを無視したコードを書くと脆弱性につながる恐れがあります。今回はシグナルハンドラの制約に関するルールを見てみましょう。 シグナルハンドラの制約 UNIXなどPOSIX準拠のOSでは、割り込みや例外を抽象化した「シグナル」と呼ばれる仕組みを用いてプロセスに(非)同期イベントが通知されます。ユーザが[Ctrl]-[C]キーを押してプログラムを中断しようとしたり(SIGINT)、整数オーバーフローが発生したり(SIGFPE)すると、それらのイベントに対応するシグナルがカーネルからプロセスに対して通知されるのです。プログラマは、これらのシグナルを受信した時に特定の動作を行わせる「シグナルハンドラ」を書くことが

    安全なシグナルハンドラを実装するには ――C/C++セキュアコーディング入門(4)
    mattn
    mattn 2010/01/06
  • 配列の要素数を知る | 移植性のあるCプログラミング

    一定期間更新がないため広告を表示しています

    配列の要素数を知る | 移植性のあるCプログラミング
  • C++ Library Links

    このページの他に、岡野原さんの "C++の便利ツール・ライブラリ" がオススメです。 標準ライブラリ STL その1。主に、リストやマップなどのコレクションに関する generic なデータ構造とアルゴリズム。 iostream その2。ストリーム入出力。 C.std その3。まだまだ現役。 boost 準標準。上の3つを超強力にした/するライブラリ達の集合体。 並列・ネットワーク・XML TBB (Thread Building Blocks) スレッドセーフなコンテナやスレッドをフル活用した並列アルゴリズムなど TinyXML 名前の通り軽量でまとまってるXMLパーザ。 MiX Minimalists XML parser。同じくXMLパーザ。 libcurlpp FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE, LDAP によるフ

    mattn
    mattn 2009/04/11
  • C言語のdiv関数 - リリカル☆Lisp開発日記

    C言語のdiv関数というものの存在を今日知りました。 商と余りを一度に求めるそうです。 #include <stdlib.h> int main() { int i, sum = 0; for (i=0; i 同等ものを「/」と「%」を使って書くと次のようになります。 #include <stdlib.h> int main() { int i, sum = 0; for (i=0; i ついでに計測 $ time ./use_div real 0m2.327s user 0m2.313s sys 0m0.020s $ time ./use_operator real 0m0.897s user 0m0.891s sys 0m0.000s div遅すぎ... 予想してましたが、やっぱり遅かった。 いまいちdivの存在意義が分かりません。 ちなみにCommon Lispではtrunc

    mattn
    mattn 2008/11/27
  • Nano domain - diary

    久しぶりにある人からメールが届いたので何かと思ったら,4月に結婚しますというお話だった。 25歳までに結婚する宣言をしていた人だったのだが,まさかその通りに間に合うとは思ってなかった。 おめでとう。 akane の 160GB HDD でファイルシステム破損事故が発生。avi ファイルを読んでいただけで xfs が破損するというのは いったいどういうことなのか ……? XFS: bad magic number XFS: SB validate failed 再起動しても直らないので,別のマシンに差して調査し直し。 xfs_repair -n の報告によると superblock が壊れているということなので,いちかばちか修復させてみる。 《xfs_repair 実行結果》 なんか妙なディレクトリ名・ファイル名が見えるが気にしてはならない。 盛大にぶっ壊されたようだが,x

    mattn
    mattn 2008/10/08
    ほー
  • Happy my life » C言語からJSONを読み込む

    先日から数年振りにC言語でコーディングしている。 その前はrailsだったのでコードを書く量が多くて、面倒な上、このうえなし。 それにしても、ポインタ使うの久しぶりだわ。 そんな事はどうでもいいとして。 その作成中のソフトで、外部から設定ファイルを読み込む仕様があったので、拡張性等も考慮しjson形式で定義することにした。 jsonを扱えるC言語ライブラリは、いくつかあるのだが、今回はJSON-Cをチョイス。 だが、JSON-Cのサンプルコードがググってもなかなか無い(他のライブラリでも似たようなものだが) それはそれ、こことか参考にしながら、とりあえずjsonフォーマットが自由自在にパースできるところまできた。 これで何とかなりそう。 ついでにテストで作ったコードを晒してみる。 こんな情報を知りたがる人がいるかどうか不明だが、ないよりは良いだろうということで。 あ、そう

  • ホワット・ア・ワンダフル・ワールド libtcc で C のソースコードを eval

    今さらながら,libtcc の素晴らしさに気付きました. libtcc を使用すると,動的に C プログラムソースコード (文字列) をオブジェクトコード (ELF) に変換してメモリ上にロードして実行して返り値を受け取ることができます.つまり,C コードを eval できる (面倒なので,返り値は int 限定.ちゃんとディスパッチすれば何でもいける). #include<stdio.h> #include "libtcc.h" int gargc;char **gargv; int eval(char *src) { TCCState *s; int result; s = tcc_new(); tcc_set_output_type(s, TCC_OUTPUT_MEMORY); tcc_compile_string(s, src); result = tcc_run(s, gargc

    mattn
    mattn 2008/06/06
    これおもしろい
  • #defineあそび

    目次 ホーム 連絡をする RSS Login Blog 利用状況 投稿数 - 1078 記事 - 2 コメント - 26208 トラックバック - 363 ニュース 著作とお薦めの品々は 著作とお薦めの品々は 東方熱帯林へ。 わんくま 東京勉強会#2 C++/CLI カクテル・レシピ 東京勉強会#3 template vs. generics 大阪勉強会#6 C++むかしばなし 東京勉強会#7 C++むかしばなし 東京勉強会#8 STL/CLRによるGeneric Programming TechEd 2007 @YOKOHAMA C++C++/CLI・C# 適材適所 東京勉強会#14 Making of BOF 東京勉強会#15 状態遷移 名古屋勉強会#2 WinUnit - お気楽お手軽UnitTest CodeZine Cで実現する「ぷちオブジェクト指向」 CUnitによるテスト駆

    mattn
    mattn 2008/06/03
  • MJSON

    mattn
    mattn 2008/05/08
  • CとしてもRubyとしても使えるプログラム - Maraigue風。

    どこかの誰かが「CとしてもRubyとしても使えるプログラム」を書いていたのですが、誰が書いた記事なのか完全に失念。del.icio.usにも何故か保存していなかった。 悔しいのでまずは自分で書いてみた。「//;」が結構ミソ。 #include <stdio.h> #define def int #define end #define BRACE { //; BRACE = nil def main(void) //; h = lambda{ BRACE printf("Hello World!!n"); } //; h.call end //; main(nil) [3/17追記]もっと簡単に書けることに気づく。 #include <stdio.h> #define def int #define BRACE { #define end } //; BRACE = nil def main

    CとしてもRubyとしても使えるプログラム - Maraigue風。
    mattn
    mattn 2008/04/16
  • strchr() ではまった話 - bkブログ

    strchr() ではまった話 標準Cライブラリに strchr() という関数があります。文字列の先頭から指定した文字を探すという単純な関数なのですが、先日、意外な仕様を知りました。 以下のコードを見てみます。 if (strchr("+-*/", c)) { // c は四則演算の記号かな? ... } この if 文は c が + - * / のいずれかの場合に条件が真となり、ブロック中が実行されます。…と、思いきや、実は条件が真になるケースがもうひとつありました。c が '\0' の場合です。 まさかと思って手元の Linux の man を見ると、文字列の終端のナル文字 ('\0') の扱いは明記されていません。 The strchr() function returns a pointer to the first occurrence of the character c i

    mattn
    mattn 2007/12/26
    これ昔ハマったなぁ...
  • google-perftools(tcmalloc)の使い方 - moratorium

    google-perftools(tcmalloc)の使い方 2007-12-17 (Mon) 22:59 Google OSS PFIでは毎週1人適当な話題で発表しているのですが、この間「GooglePerfToolsの使い方」という軽いお題で発表した資料を公開してみます。メモリ周りの問題は大変ですよね…。 google-perftools - Fast, multi-threaded malloc() and nifty performance analysis tools 肥え続けるTomcatと胃を痛めるトラブルハッカー ローテクなメモリ使用量監視方法 特にC++で長期運用中のメモリリークに苦しんでおられる方には役立つかと思います。基的にドキュメントの日語訳ですが。SlideShareだとなぜか図がずれるので、元ファイルをこちらに置いておきます。 | View | Upload

    mattn
    mattn 2007/12/18
    後で試す
  • c-repl

    Update (March 2013): C-REPL was a neat hack, but a more principled implementation of the same goal exists in Cling. Many programming languages come with a REPL (read-eval-print loop), which allows you to type in code line by line and see what it does. This is quite useful for prototyping, experimentation, and debugging code. Other programming languages, and especially C, use a "compile-run" model,

    mattn
    mattn 2007/09/28
  • はてなブログ | 無料ブログを作成しよう

    2024夏休み旅行 神戸・2日目【前編】 zfinchyan.hatenablog.com ↑1日目はこちら 6:50 わたしと夫だけ先に起床 前日に買っておいたお芋のパンで朝ごはん 昨日の疲れからか、なかなか息子たちが起きてこなかったので、ゆっくり寝かせてから10:00にホテルの下にあるプレイゾーンに行って、パターゴルフやバス…

    はてなブログ | 無料ブログを作成しよう
    mattn
    mattn 2007/08/27
  • LLの壁を越えるためのC - Do You PHP はてブロ

    via. Javaがファームで流行しなかった理由 | 眠る開発屋blog, http://d.hatena.ne.jp/LazyCoder/20070825/1188054713, http://www.ac.cyberhome.ne.jp/~mattn/cgi-bin/blosxom.cgi/etc/20070823090234.htm デスクトップアプリの話っぽいので、ちょっと違和感があるのかなぁ。。。 いずれにしても、要はコメントにある この業界ではよっぽどの特殊技能持ちのエキスパートでない限り、これだけやってれば大丈夫なんてありえないでしょう。ある程度マルチでこなせて始めてえるんじゃないですかね。 ってことかと。まあ、「マルチ」を「複数の言語」と捉えるとちょっとナニかなと思いますが、「言語以外の周辺の技術」だったり「プロトコル」とすると、間違いなく必要だろ、と。単純に「コード書け

    LLの壁を越えるためのC - Do You PHP はてブロ
  • C is the new assembly - ロックスターになりたい

  • 1