タグ

C言語に関するfa11enprinceのブックマーク (3)

  • C言語forkメモ(Hishidama's C "fork" Memo)

    S-JIS[2012-11-17] fork関数 fork()は、C言語(UNIX系)で子プロセスを起動する関数。 概要 fork()を使うと、実行中の状態(コンテキスト)すなわち現在のプロセスが使っているメモリーの中身が全て複製され、子プロセスが起動される。 したがって、ローカル変数やポインター等もそのまま使える。 fork()前にmalloc()等で確保していた領域もそのまま使えるが、free()は親プロセス側と子プロセス側で別々に行う必要がある。 (ポインターの値を表示してみると、親プロセス側も子プロセス側も同じ値が表示される。しかしOSレベルでは別の領域が割り当てられているので、実際は被ってはいない。ポインターは、いわば“プロセスに割り当てられたメモリーの先頭アドレス”からの相対値に過ぎない) fork()の戻り値は、-1ならエラー、0なら子プロセス起動成功、正の数は起動された子プ

  • Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ

    今年の文化祭で書いた記事です。 - C言語といえば、いやなイメージ、過去の遺産といった感じがあるかもしれません。 C言語のネガティブな側面というと、やはりポインタやメモリ管理などが難しい、ということが思いつくかもしれません。 しかし、C言語のポインタは表記に騙されやすいだけで、仕組み自体は全く難しくありません。 文法も、どこぞのPerlC++と比べたら屁でもない単純さです。 実のところ、仕様が煩雑で難しいのは、Cプリプロセッサなのであります。 普段からあまり複雑な使いかたをしないから気づかないかもしれませんが、Cプリプロセッサの置換処理は、欺瞞と裏切りに満ちた世界なのです。 これが進化するとテンプレートなどといったもっと面白いものになるのですが、今回はCプリプロセッサで計算をしちゃったりするところまで試しにやってみましょう。 (なお、GCCにより実験的に調べた記事なので、他のCコンパイラ

    Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔なQ
  • Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱

    二十五日半狂乱、6日目(の分...orz)の記事 Cのエラーハンドリングを毎回やるのは面倒だ! 前回も言ったが、Cではエラーハンドリングに戻り値とerrnoを用いる. それはそうと例外設計において"無視"は大罪である. だから、関数を呼び出したら戻り値は漏らさずチェックすべきだ. ということで、例えば以下のように逐一戻り値をチェックする. if(send(sockfd, buf, len, 0) < 0){ ERROR("send"); exit(1); } あぁ、面倒だ. 一体コードのどの部分が正常系の処理なのか? ほとんどエラーハンドリング*1で埋め尽くされるじゃないか. そもそもエラーハンドリング部分に書くのは毎回同じコードだし、コードの繰り返しは防ぎたい. エラー処理部分をラッピングして楽をする unpv12eの中でラッパーを被せることによってこの面倒を回避する方法を知った. in

    Cのエラーハンドリングと例外設計、例外処理のメモ - 百日半狂乱
  • 1