タグ

cに関するsnsn9panのブックマーク (12)

  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • Man page of FORK

    Section: Linux Programmer's Manual (2) Updated: 2020-06-09 Index JM Home Page roff page 名前 fork - 子プロセスを生成する 書式 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 説明 fork() は呼び出し元プロセスを複製して新しいプロセスを生成する。新しいプロセスは「子」プロセスと呼ばれ、呼び出し元プロセスは「親」プロセスと呼ばれる。 The child process and the parent process run in separate memory spaces. At the time of fork() both memory spaces have the same content. Memory wr

  • Man page of SIGWAITINFO

  • Linux シグナル入門 - 4. SIGHUP, SIGINT, SIGTERM

    2013-11-5 (鈴) 1. シグナルとは? 2. シグナル・ハンドラと signal システム・コール 3. シグナルの用途 4. SIGHUP, SIGINT, SIGTERM 5. SIGCHLD 6. SIGALRM と sigaction システム・コール 7. siglongjmp による大域脱出 8. popen/pclose と SIGCHLD Linux などの Unix 類ではプロセスを終了させる事象のうち,次の3種類のシグナルの発生は当然起こり得るものとして想定しなければならない。 SIGHUP (= 1, hangup) 端末終了時に発生。元来はモデムの受話器をあげて通信を切ったことから SIGINT (= 2, interrupt) Control-C による中断 SIGTERM (= 15, termination) kill コマンドでシグナル無指定時に送

  • 子プロセスの状態変化を待つ – C言語入門講座

    wait関数は、呼び出し元プロセスの子プロセスの状態変化を待ちます。子プロセスの状態変化がすでに発生していた場合は、wait関数はすぐに復帰します。それ以外の場合は、子プロセスの状態変化が起こるか、シグナルハンドラによりシステムコールが中断されるまで呼び出し元プロセスは停止します。 なお、ここでの状態変化には、次のような事があります。 子プロセスの終了。 シグナルによる子プロセスの停止。 シグナルによる子プロセスの再開。 この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。 *statusは子プロセスからの終了ステータスを格納する変数を指定します。なお、終了ステータスが不要な場合は、NULLを指定できます。 戻り値として、処理が成功した場合は、子プロセスのプロセスIDが、失敗した場合は-1を返します。 終了ステータスはexit関数の引

  • 革命の日々! シーケンスロック その5 volatileがダメな理由

    どもども。またまた間隔があいてしまいましたがシーケンスロックな話しの続きです。 前回の記事で坩堝さんから面白い指摘をうけたので今回は予定を変更してvolatileの話をしたいと思います。 retをvolatileにするだけではうまくいかないんですよね? どういう風になるんだろ. なるほど、たしかに世のC言語の参考書を見るとvolatileはある種の最適化を妨げる効果を持つと されています。 これだけ見ると、volatileとつけるだけすべての最適化が無効になってうまく動きそうですね。 しかし、その理屈は微妙におかしいのである 多くの人が「ある種の」という言葉を拡大解釈しているがvolatileは来スレッド同期に使えるようなシロモノではないのである。 つづきは、続きを読むからご覧ください。 あと、お願い。 今回の話は前提知識がいろいろとあるので、末尾のご参考にあげたURLを読んでから 読ん

    snsn9pan
    snsn9pan 2009/10/22
    volatileの理解促進に
  • 2004-10-02

    最近C++を使う時間が長いのでががーっと C++批判文章を書き上げてみる…。 (注:以下の文章において、C言語とはC/C++をさすものとお考えください) gotoは今から30年以上も前のダイクストラ先生による撲滅運動の 甲斐もあってかどうなのか、今日では良くないものの代名詞のように なっている。良くないということの主な理由はプログラムの流れが 見えにくくなる、等のようなのだが、実際のところどの程度のものかは よく分からない。C言語において、例えばループ構文を使わずにすべてを gotoでまかなおうとするとこれはほとんど自明に、確かに大変である。 例えばfor文なら、 for (A;B;C) body というものは、これを形式的に A _continue_for: if (B) goto _break_for; C goto _continue_for; _break_for:; このように変

    2004-10-02
    snsn9pan
    snsn9pan 2009/09/16
    多段ループの抜け方から考察する継続性
  • 目指せプログラマー!

    snsn9pan
    snsn9pan 2009/08/19
    #errorと#warningの使い方。コンパイル時に定数チェックとか出来る
  • 石田晴久氏が死去 UNIX、インターネットの国内普及に尽力

    国内のUNIX普及などに尽力した石田晴久氏(東京大学名誉教授、サイバー大学IT総合学部長)が3月9日、心筋梗塞のため都内の病院で死去した。72歳だった。 東大大型計算機センター在職時の1970年代に日に初めてUNIXを紹介し、83年には日UNIXユーザー会(JUS)を村井純氏らと設立。UNIXやC言語の基書の邦訳者としても親しまれた。1984年、国内インターネットの基礎となった「JUNET」(Japan University Network)のスタートにも東大への接続で協力するなど、インターネットの発展にも大きく貢献した。

    石田晴久氏が死去 UNIX、インターネットの国内普及に尽力
    snsn9pan
    snsn9pan 2009/03/10
    ありがとうございました。
  • Super Technique 講座〜シグナルとコールバック

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

    snsn9pan
    snsn9pan 2008/08/26
    すごくわかりやすい。
  • 16.2.2 #if 文

    #ifdef 文に対してより一般的な #if 文も用意されてい ます。この場合、#if の後ろには定数式を指定します。定数式 には、プログラム中の変数などは使えない点に注意しましょう(プログラム がコンパイルされる以前に処理されるのですから当然ですね)。 最も良く使われるのが、defined() 文と共に使う場合です。 defined() はマクロ定義がされいているか否かを判別します。 マクロ定義がされていない場合の判別には、否定演算 ! と共に !defined() のように使います。例えば、次の例では マクロ定義 Square または square が定義されている場合に有効になるような 例です。 #if defined(Squre) || defined(squre) #define sq(x) ((x)*(x)) #define Squre #endif

    snsn9pan
    snsn9pan 2008/05/27
    #ifdefではor出来ないので#ifとdefinedを使用してorする。defineの値を変更する際にも#ifは使える。
  • C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan

    ポインタとは ポインタはC/C++言語の特徴的な機能のひとつである。ポインタ(pointer)を直訳すると「指し示すもの」であり、別の変数や文字列定数の場所を指し示すために使う。また、ポインタを指すポインタ(ポインタへのポインタ)というものも存在する。 このページをお読みいただいている読者にあっては、「C言語 ポインタ」「C++ ポインタ」などのキーワードでWeb検索をしたことがあるかもしれない。そうするとポインタに特化した内容の書籍をいくつか見つけられる。それだけ奥が深い機能ということである。 ポインタの用途 では、ポインタはどんなところで使われているのだろう。C/C++言語では、あらかじめ定義されている関数が多数存在するが、その一覧には、*(アスタリスクあるいはアステリスク)が付いているものをよく見かける。 これらはポインタを表し、主に文字列の操作やファイルをはじめとするデータの入出力

    C/C のポインタの機能--参照渡し - page2 - builder by ZDNet Japan
    snsn9pan
    snsn9pan 2008/03/31
    コメントで散々指摘されているのに直らないのはなんなんだ。CNETの信用にも関わってくるから即刻この記事を削除しろ。
  • 1