タグ

cに関するkanoukのブックマーク (28)

  • On Loving C.. 日本語訳

    以下の文章は、Michael Feathers による On Loving C.. の日語訳である。 文中の固有名詞などについて理解の助けとなるよう Wikipedia へのリンクを加えさせてもらった。 認めなければならないことがある。私は C を愛している。しばらくはそれを意識していても、忘れがちだ。Ruby、Haskell、OCaml、C++Java、そして C# に心移りしたこともある――今も多くの言語に時間を割いているが、C の元に戻ってくると、私は故郷に帰ったような気持ちになる。 私は何十年も前に Kernighan と Ritchie のをパラパラとめくったときのことを覚えている。C にはとても欲求不満を感じた記憶もあるが、とても満足を与えてくれたことも覚えている。C にはヘンなところがあるが、振り返ってみると、それは多くの他の言語のヘンさに比べれば不可解なところはずっと

  • メモリ管理

    プログラムはデータです。データを実際に解析(解釈)してみて始めて命令コー ドか単なるデータかわかります。プログラムを起動するというのは、プログラ ムファイルを解析しながらメモリの中に並べ、並べ終ったら、開始位置(Entry Point)と言いますから、命令を CPU に送り込み始めることです。 CPU は命令をメモリから順に呼んで、それを解釈して動きます。 メモリの中にプログラムがどういう風に並ぶかを理解しましょう。 プログラムの中には命令と変数があります。どちらも単なるビットの並びです。 区別は尽きません。だから分離して並べます。命令が並ぶ区画(セグメント) と変数が並ぶ区画があります。 変数には種類があります。これはどの区画に置かれて、どう管理されるかが違 うからです。変数が置かれる区画はさらに小さな区画に区分けされているとい うことです。スタック、ヒープ、グローバル(スタティックも同

  • Cのかけら

    小さい C プログラムを集めています。自分用のメモ書きです。同じ動作をする Ruby のプログラムと比較しても、意外に複雑な処理を簡単に記述できるのに驚かされます。先輩達がなんでもかんでも C 言語で作って行ったのが分かる気がします。しかし、ポインタの操作やメモリ管理など初心者には地雷があちこちに埋まっていそうです。Ruby でできることは Ruby でやった方が安心です。 C の関数の使い方が分からなくなったら man sprintf のように man ページを参照できます。ヘッダーファイルは /usr/include/stdio.h のように /usr/include/ 以下に納められているようです。locate で探すのも便利です。Unix は C 言語の開発環境なのだというのが実感として分かります。 C のソースをスクリプト感覚で試すには

    kanouk
    kanouk 2008/01/31
    CとRubyのソースがたくさん。
  • C言語の誤解されていそうなことについて

    C言語には、字面から常識的に類推したことと実際のキマリが合わない場合がままあり、 慣れない入門者や他の言語の利用者からすると誤解しそうなことが結構ある。 そういったこと(の一部)を以下に列挙。 [追記2012] これ書いたときはまだC99は決まってなかったこともあり、 基的に C89 の話です。C99以降にかわってしまってる件もあり。 文法関係 main の戻り値の型は void でなく int。(*) (※ c++やc99以降は事情が多少変わった) 関数定義で戻り値の型名を省略すると void でなくint。(*) Cでは引数省略の関数定義fnc()はfnc(void)でなくfnc(...)。(*) char,shortの値は演算や関数引数でまずintに変換される 整数の基はint, 実数の基は(どちらかといえば)floatでなくdouble.(*) char, signed ch

    kanouk
    kanouk 2008/01/30
    ほとんどしらないや。ド素人だ>自分
  • アルゴリズムとデータ構造演習

    演習の目的は、プログラミング言語C及びSchemeの基礎を習得し、 それらの言語を通じて、講義「アルゴリズムとデータ構造」の理解を深めることにあります。 重要なお知らせ 特に重要な連絡事項はここに掲載されます。 課題について 課題には、A課題とB課題があります。(課題番号の末尾が種類を表します。) B課題が基礎的な課題で、A課題が発展的な課題となっています。 B課題を全問解くことが、単位取得の目安です。 C入門第1回(10月10日) C入門第2回(10月17日) C入門第3回(10月24日) C入門第4回(10月31日) C第1回(11月7日) C第2回(11月14日) C第3回(11月21日) C第4回(11月28日) C第5回(12月5日) Scheme第1回(12月12日) Scheme第2回(12月19日) Scheme第3回(1月9日) Scheme第4回(1月16日) C補講

    kanouk
    kanouk 2008/01/27
    東大の授業の資料。勉強の題材に適当。
  • 標準Cライブラリの実装 シグナル処理

    raise関数は、明示的にシグナルを発生させるための関数です。非同期シグナルに対する処理とは異なり、raise関数と、raise関数を内部的に呼び出すabort関数によって呼び出されたシグナル処理ルーチンは、そこで行うことができる処理にほとんど制約がありません。 非同期シグナルの場合、シグナル処理ルーチンの中で呼び出せる標準関数は、abort関数と_Exit関数、そして同じシグナルに対するsignal関数だけです。今回の実装では、非同期シグナルは、タスク例外処理ルーチンからraise関数を呼び出すことで実現しますが、非同期の場合はraise関数を使っていても上記の制約があるものとします。 つまり、タスク例外処理ルーチンを介して呼び出されたシグナル処理ルーチンからは、ほとんどの標準関数を呼び出すことができず、longjmp関数を用いて脱出することもできなくなります。 ところで、前回のsign

    kanouk
    kanouk 2008/01/23
    シグナル処理について
  • Codase - Source Code Search Engine

    Making Cybersecurity Less Scary for Small Businesses and Startups Are you worried about cyber attacks on your business? Don’t take chances with your sensitive data and operations. Choose Codase, the affordable and effective cybersecurity solution provider. Our focus is on network security, cloud security, and website security, tailored to the specific needs of small businesses and startups. We pro

    kanouk
    kanouk 2008/01/02
    C, C++, Javaのソースコード検索エンジン
  • C の qsort と STL の sort の速度比較 - bkブログ

    STL は知れば知るほどよくできていると感心します。Effective STL の46項には今回と同様の実験が取り上げられています。 Effective STL には他にも、イテレータの無効化やコンテナ操作の性能など、 STL を使う上で注意すべき点が詳しく解説されています。 実験に使ったプログラムは以下の通りです。 $((2**24)) はコマンドラインで 2の24乗を計算する表記です。bash や zsh で使えます。 実行結果 % g++ -O2 -o sort sort.cpp % ./sort $((2**24)) qsort: 9.22 stl-sort-func: 5.62 stl-sort-functor: 2.56 % icc -O2 -o icc-sort sort.cpp % ./icc-sort $((2**24)) qsort: 8.82 stl-sort-fun

    kanouk
    kanouk 2008/01/02
  • 普通のやつらの下を行け: assert_caller() - bkブログ

    普通のやつらの下を行け: assert_caller() 以前に、低レベルプログラミングを愛好する知人が「普通のやつらの下を行け」を口癖にしていました。当時は何を言っているのかと聞き流していましたが、自分も最近になってようやく低レベルプログラミングのおもしろさがわかってきました。今回は「普通のやつらの下を行け」企画の第一弾として assert_caller() なるものを作ってみたいと思います。 assert_caller() とは assert_caller() とは、特定の関数からの関数呼び出しだけを通すためのアサーションです。たとえば、次のように foo() の先頭で assert_caller(main) と書いた場合、 foo() は main() からしか呼び出せなくなります。他の関数から foo() を呼び出した場合はエラーメッセージとともに異常終了します。 void foo

    kanouk
    kanouk 2008/01/02
  • 普通のやつらの下を行け: Cで動的コード生成・実行 - bkブログ

    普通のやつらの下を行け: Cで動的コード生成・実行 スクリプト言語には動的にコードを生成して実行する機能を持ったものが多くあります。 普通のやつらの下を行けの第3回として、今回は C による動的なコード生成と実行に取り組んでみたいと思います。 今回書いたコードの main() 関数は以下のようなものです。 int main(int argc, char **argv) { assert(argc == 2); define(int, add, (int x, int y), "{ return x + y; }"); define(int, mul, (int x, int y), "{ return x * y; }"); define(int, add_argv1, (int x), "{ return x + %d; }", atoi(argv[1])); printf("%d\n"

  • 普通のやつらの下を行け: C でバックトレース表示 - bkブログ

    普通のやつらの下を行け: C でバックトレース表示 普通のやつらの下を行けの第2回として、今回は glibc の関数を使って C でバックトレース (スタックトレース) の表示を行ってみます。 バックトレースとは バックトレースとは、大ざっぱに言うと、現在の関数に至るまでの道筋です。たとえば、次の Ruby プログラムを実行すると、 1 / 0 の行で例外が発生して、バックトレースの表示とともにプログラムは異常終了します。 def foo 1 / 0 end def main foo end main この例では main から foo を呼び foo の中の 1 / 0 の部分で例外が発生しています。 % ruby divide-by-zero.rb divide-by-zero.rb:2:in `/': divided by 0 (ZeroDivisionError) from div

  • やねうらお―よっちゃんイカを買いに行ったついでに家を買う男 - プログラミング名著100選

    プログラミングの書籍のなかから、100冊を選りすぐってみたい。 まずはC/C++言語系。 「Effective C++」「More Effective C++」「Effective STL」この3冊は外せないだろう。持ってなければモグリだ。(「Effective C++」「More Effective C++」は、原著第3版が出たのでリンク差し替えた。) 「Modern C++ Design」に関しては、どうせ使えもしない(?)lokiの解説がてらtemplateの解説をしてあるだけなので、いまであれば、boostのtemplate解説である「C++ Template Metaprogramming」のほうがいいような気もするが、これまだ邦訳されてないので英語の苦手な人は「Modern C++ Design」以外の選択肢は無い。 あと例外安全について書いてあるとして「Exception

    やねうらお―よっちゃんイカを買いに行ったついでに家を買う男 - プログラミング名著100選
    kanouk
    kanouk 2008/01/02
  • Cプログラミングの秘訣

    特集 Cプログラミングの秘訣 最終更新: 2006-03-28 このテキストはC MAGAZINE 1992年4月号に掲載された原稿のオリジナルテキストを元にしてHTMLに変換したものです。掲載文章と細部が異なっていると思われます。また、気付いた個所をいくつか修正してあります。 当時はまだWindows 95もないような時代で、現在の状況から見ると違和感のある内容も結構あるかもしれませんが、時代背景を想像しながら補正しつつ読んでいただければ幸いです。 ※2006年3月28日追記: 何が原因か知りませんがこのページのアクセスが増えているそうなので、 HTML のおかしなところを修正しました。 文章の変更はありません。 なお、このサイト(表ページ)は現在休眠状態ですが、 裏ページ や 裏の裏ページ の方を、細々と更新していたりします。 目次 Part1 よいプログラムを書く条件 Part2 明

    kanouk
    kanouk 2008/01/02
    じっくり読もう。
  • checkstack.pl で関数のスタック消費量を調べる - bkブログ

    checkstack.pl で関数のスタック消費量を調べる Linux カーネルのソースコードに付属する checkstack.pl を使うと、C/C++ のプログラムの関数のスタック消費量を調べることができます。checkstack.pl は objdump -d のディスアセンブルの出力からスタックポインタの操作をパターンマッチしてスタックの消費量を計算しています。 入手方法 checkstack.pl は Linux カーネルのソースコードに付属しています。Debian GNU/Linux sarege なら次のようにコマンドラインから実行して取得できます。ソースツリーに含まれる scripts/checkstack.pl が目的のものです。 % apt-get source kernel-source-2.6.8 使い方 checkstack.pl の使い方は簡単です。スタックサイ

    kanouk
    kanouk 2008/01/02
    これが知りたかった!タイムリーすぎ。
  • lsのソース嫁 via 日経バイト1月号 青木さん曰

    Fix ls_tests:o_flag with ZFS TMPDIR Unlike UFS or TMPFS, ZFS sets uarch automat…

    kanouk
    kanouk 2008/01/02
    lsのソース
  • Amazon.co.jp: カーニハン&リッチー『プログラミング言語C』を読む (KS): 小林健一郎: 本

    Amazon.co.jp: カーニハン&リッチー『プログラミング言語C』を読む (KS): 小林健一郎: 本
    kanouk
    kanouk 2008/01/02
    メタ本
  • malloc The 67th kernel reading party - Google Video

    The 67th kernel reading party - 1:39:31 - Sep 24, 2006 Yokohama Linux Users Group - www.ylug.jp/ ()  Rate: glibc malloc Download video - iPod/PSP |  Embed video Download is starting. Save file to your computer. If the download does not start automatically, right-click this link and choose "Save As". How to get videos onto the iPod or PSP. <embed id="VideoPlayback" src="http://video.google.com/goog

    kanouk
    kanouk 2008/01/02
    glibc malloc関数について。あとでじっくり見よう。読書会の進め方の参考にも。
  • 革命の日々! カーネル読書会で講演してきました

    7月にLMSで発表したglibc mallocの解説を、ブラッシュアップしてYLUG・カーネル読書会でも発表してきた。 人の知らない間にビデオ撮影をして、YouTubeにアップするとかいう話になっていたので、「ちょ・・業務用です・・・か??」とでも言わんばかり、かなり格的ビデオカメラが会場に設置されていた。 もうダメである。 緊張しまくり、用意しておいた小ネタギャグは一切言えなかった。 熱いトークを期待したいた皆さん(いるのか?)ごめんなさい。 てゆーか、ネクタイに指す、アナウンサー向けっぽげなマイクが用意されているあたりがYLUGスゴス。と思った。 まあ、それはさて置き、当日の感想としてはhyoshiokさんのBlogあたりの感想がよくまとまっていていい感じなのではないかと思う。 結論: みんなRubyが好きなんだよ。 kernel hackerもLL hackerも交流しようよ と

    kanouk
    kanouk 2008/01/02
    ↓の資料
  • memccpy() で文字列をコピーする - bkブログ

    memccpy() で文字列をコピーする 詳解Unixプログラミングを読んでいたところ、標準入出力ライブラリの章に「この例からわかることは、行単位の関数は memccpy(3) を用いて実装されていることである」という記述がありました。 一瞬、memcpy(3) の誤植かと思いましたが、調べてみると 4.3 BSD で追加された関数ということがわかりました。 glibc に入っているので Linux でも使えます。 マニュアル によると memccpy() は次のような関数です。 書式 void *memccpy(void *dest, const void *src, int c, size_t n); 説明 memccpy() はメモリ領域src からメモリ領域dest に最大でnバイトコピーする。nバイトコピーする前に文字 c が見つかると、そこでコピーを中止する。 返り値 memc

    kanouk
    kanouk 2008/01/02
  • Super Technique 講座〜シグナルとコールバック

    この文書ではまず、関数ポインタとその型チェックについて述べた後で、UNIXのシグナル機能について解説する。そして、ウィンドウシステムのプログラミングで多用される「コールバック」について解説する。 ちなみにシグナルの機能は質的には UNIX に固有である。他のOSにもないわけではないが、その異同については筆者は関知しない。また、UNIXでのシグナルの実装については Linux を基準に解説をしていく。UNIX シグナルは、実は具体的な実装において大変差がある機能なのだが、一応 POSIX で「こう実装しなさい」という風に決まってはおり、後発の Linux は比較的マジメにそれを実装しているので、まあ、Linux を基準にするのが無難というものであろう(ユーザ比の問題を別にしても)。勿論、伝統的に重要ないわゆる「SysVシグナル」「BSDシグナル」についてもしっかりと解説しているが、もはや「

    kanouk
    kanouk 2008/01/02
    Cで作ったプログラムでOSのシグナルを受信するときの実装方法など。SIGUSR1とか便利げなのでサンプルを書いてみよう。